问题 A: 一道签到题

时间限制: 2 Sec  内存限制: 128 MB
提交: 62  解决: 27
[提交][状态][讨论版]

题目描述

我想说这是一道签到题,意思就是本次测试中最水的一道,不过我这样说你真的愿意相信我吗?哈哈,题目是这样的给你一下小数,然后请告诉我分别告诉我这个小数的循环节的循环次数、循环节以及循环节长度

输入

输入包括多组测试数据每组测试数据1行,包括一个小数,小数的长度不超过200,小数大于0小于100

输出

分别输出这个小数的循环节的长度、循环节以及循环次数,中间以一个空格间隔

样例输入

8.6987698769876987
0.666
5.1

样例输出

4 6987 4
1 6 3
1 1 1
题解:kmp;
代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 char  m[210],s[210];
 4 int p[210],len;
 5 void fn(){
 6     int i=0,j=-1;
 7     p[0]=-1;
 8     while(i<len){
 9         if(j==-1||s[i]==s[j]){
10             i++;j++;
11             p[i]=j;
12         }
13         else j=p[j];
14     }
15 }
16 int main(){
17     while(~scanf("%s",m)){
18         int i=0,j,k;
19         while(m[i]!='.')i++;
20         for(j=i+1,k=0;m[j];j++,k++){
21             s[k]=m[j];
22         }
23         s[k]='\0';
24         //printf("%s\n",s);
25         len=strlen(s);
26         fn();
27         //for(i=0;i<len;i++)printf("%d ",p[i]);puts("");
28         printf("%d ",len-p[len]);
29         for(j=p[len];j<len;j++)printf("%c",s[j]);
30         printf(" %d\n",len/(len-p[len]));
31     }
32     return 0;
33 }
View Code

问题 B: MZY寻宝

时间限制: 1 Sec  内存限制: 128 MB
提交: 157  解决: 49
[提交][状态][讨论版]

题目描述

贪心的MZY去一个迷宫寻宝。已知:若MZY在位置(x, y),他下一次只能移动到(x-1, y)、(x+1, y)、(x, y-1)、(x, y+1)四个位置中的任一个(前提不能越界)。
毕竟他不是我,我可以直接飞到宝物那里去。由于MZY比较笨拙,他移动一步需要1分钟。请你帮他算出找到宝物所需要花费的最少时间。

迷宫是一个N*M的地图,图中只有四个数字。
0:此处是空的,可以走
1:此处有障碍,不可以走
2:MZY起点
3:宝物位置(只有一个宝物)

题目保证CZY至少有一条路可以到达宝物位置。

输入

输入数据有多组。

每组以两个整数N和M开始,分别表示迷宫的行数和列数,接下来N行每行有M个数。(1 <= N, M <= 10)

输出

输出MZY找到宝物的最少需要花费的时间。(以秒为单位)

样例输入

2 2
0 2
1 3

样例输出

60


题解:错了12次终于交对了,尝试了各种方法,刚开始广搜,wa然后再用深搜还是wa换了种深搜写法不用数组了,然后就一直运行错误,跟魔王那题一样老是运行错误
都无奈了,然后又用广搜,换了种写法,用优先队列重新写也不管超内存了,然后就过了。。。曲折淋漓啊; dfs代码:
 
 1 #include<stdio.h>
 2 #define MIN(x,y) x<y?x:y
 3 int map[15][15];
 4 int nx,ny,minstep,N,M,sx,sy;
 5 void dfs(int x,int y,int step){
 6     if(x<0||y<0||x>=N||y>=M||map[x][y]==1)return;
 7     if(step>minstep)return;
 8     if(map[x][y]==3){
 9         minstep=MIN(minstep,step);
10         return;
11     }
12     map[x][y]==1;
13     dfs(x+1,y,step+1);
14     dfs(x-1,y,step+1);
15     dfs(x,y+1,step+1);
16     dfs(x+1,y-1,step+1);
17     map[x][y]=0;
18     return;
19 }
20 int main(){
21     while(~scanf("%d%d",&N,&M)){minstep=0xfffffff;
22         for(int i=0;i<N;i++){
23             for(int j=0;j<M;j++){
24                 scanf("%d",&map[i][j]);
25                 if(map[i][j]==2)sx=i,sy=j;
26             }
27         }
28         dfs(sx,sy,0);
29         printf("%d\n",minstep*60);
30     }
31     return 0;
32 }
View Code

相关文章:

  • 2022-01-25
  • 2021-07-15
  • 2021-06-04
  • 2022-12-23
  • 2022-01-20
  • 2021-06-06
  • 2022-12-23
  • 2021-12-08
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案