寒假刷题之普通之变形课

呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
Input测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
Output如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)

Sample Input

so
soon
river
goes
them
got
moon
begin
big
0

Sample Output

Yes.

Harry 可以念这个咒语:"big-got-them".

分析:  其实不管怎么看,这题都是一个简单搜索而已,难度估计不怎么大,进行题目是想用找到以‘b‘开头,经过变化得到以‘m‘结束的字符串,那么直接可以把‘b‘当作搜索起始,‘m‘当作结束符号即可。将每次使用过的字符串进行标记,这个是普通搜索的步骤。然后进行遍历,就可以找到当前字符串组合是否可以满足要求并输出最后的答案。 

代码:  

#include <stdio.h>
#include <string.h>
char str[100][100]={‘\0‘};
bool result;
bool isVisited[100];
int index;

void DFS(char ch){
 
 if(result == true) return;
 for(int i=0; i<index; i++){
  if(isVisited[i] == true)
   continue; 
  if(str[i][0] == ch){
   if(str[i][strlen(str[i])-1] == ‘m‘){
    result = true;
    return;
   }
   isVisited[i] = true;
   DFS(str[i][strlen(str[i])-1]);
   isVisited[i] = false;
  }
 }
}

int main(){
 
 while(scanf("%s",str[0]) == 1){
  index = 1;
  result = false;
  while(scanf("%s",str[index]) == 1)
   if(strcmp(str[index],"0") == 0)
    break;
   else
    index++;
  memset(isVisited,false,sizeof(isVisited));
  DFS(‘b‘);
  if(result == true)
   printf("Yes.\n");
  else
   printf("No.\n");
 }
 return 0;
}

时间: 2024-08-05 15:18:31

寒假刷题之普通之变形课的相关文章

寒假刷题之普通之红与黑

Description - 题目描述 有个铺满方形瓷砖的矩形房间,每块瓷砖的颜色非红即黑.某人在一块砖上,他可以移动到相邻的四块砖上.但他只能走黑砖,不能走红砖. 敲个程序统计一下这样可以走到几块红砖上. Input - 输入 多组测试用例.每组数组开头有两个正整数W和H:W与H分别表示 x- 与 y- 方向上瓷砖的数量.W和W均不超过20. 还有H行数据,每行包含W个字符.每个字符表示各色瓷砖如下. '.' - 一块黑砖 '#' - 一块红砖 '@' - 一个黑砖上的人(一组数据一个人) 输入

noi寒假刷题之旅

 1.1编程基础之输入输出(10题) Hello, World! #include<iostream> using namespace std; int main() { cout<<"Hello, World!"<<endl; return 0; } 输出第二个整数 #include<iostream> using namespace std; int main() { int a,b,c; cin>>a>>b&

noi寒假刷题之旅_ 1.8编程基础之多维数组(25题)

»1.8编程基础之多维数组(25题) 上次编辑的时候忘记保存了,前面几题就算了趴懒得 08:矩阵加法 #include<iostream> #define MAX 105 using namespace std; int table[MAX][MAX]; int main() { int n,m; cin>>n>>m; for(int i=0;i<n;++i)for(int j=0;j<m;++j)cin>>table[i][j]; int t;

大二寒假刷题随笔

7.5 学生成绩排序 假设学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型.输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息.如果平均分相同,按输入的先后顺序排列. 输入格式: 输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号.姓名.三门课程成绩(整数). 输出格式: 输出从高到低排序后的学生信息,包括:学号.姓名.平均分(保留两位小数). 输入样例: 3 101 Zhang 78 87 85 10

寒假刷题之普通之最小差

Description - 题目描述 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数.除非构造的数恰好为0,否则不能以0打头. 举例来说,给定数字0,1,2,4,6与7,你可以写出10和2467.当然写法多样:210和764,204和176,等等.最后一对数差的绝对值为28,实际上没有其他对拥有更小的差. Input - 输入 输入第一行的数表示随后测试用例的数量. 对于每组测试用例,有一行至少两个不超过10的十进制数字.(十进制数字为0

hdu1181 bfs搜索之变形课

原题地址 这道题数据据说比较水,除了第一组数据是Yes以外,其余都是No,很多人抓住这点就水过了.当然了,我觉得那样过了也没什么意思.刷oj刷的是质量不是数量.这道题从题目上来看是个不错的 搜索题,解法多种多样,有 dfs,bfs,并查集,dijkstra算法都能解决. 题目分析: 题目中给了很多字符串,但是关心的只是字符串的第一个和最后一个字符.咋看起来,貌似是要建立一个个字符间的"映射",其实不然,这其实可以转化为一张26*26的有向图.有最多26个结点,原先的字符间映射关系就转化

HDU 1181 变形课

[题目描述 - Problem Description] 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermion

停课刷题总结-给自己一点鼓励吧

嗯,我已经停了四五天课在家刷BZOJ准备复赛了,感觉压力好大.但是,实际上感觉效率并不高,每天就是7-8题的样子,而且并不是每题都有质量.而且这几天刷下来,我貌似因为刷了太多水题的关系,打字写题的速度变慢了,有一点悠闲没有紧迫感了,要赶快把这个习惯给改掉!今天去学校做题被虐了,竟然一个简单的Hash没有调对[虽然我现在还是不知道为什么会死循环QAQ.]感觉吧,可能因为刷题有点不在状态了.[其实也因为刷题的间隙玩了几盘LOL,游戏这东西QAQ]被虐了,感觉很不爽,有点难受,毕竟我付出了那么多努力,

变形课--hdu1181

变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 18016    Accepted Submission(s): 6471 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规