题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=797
gcd表
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
大家一定对gcd很熟悉吧,现在有一个问题又来了,给你一个n*m的表,第 i 行 ,第 j 列 的值是gcd(i,j)。
然后有一个序列,你知道这个序列是否在n*m的表中的某一行出现过没。(要连续的啊)
- 输入
- 输入n,m,k(n,m如上所述,k为序列的长度,1 ≤ n, m ≤ 10^12; 1 ≤ k ≤ 10000)
接下来k个数。 - 输出
- 如果出现过输出“YES” 否则 “NO”
- 样例输入
-
100 100 5 5 2 1 2 1 100 100 7 1 2 3 4 5 6 7
- 样例输出
-
YES NO
下面的代码超时了,AC不了,哪位大神可以帮忙解决下,感谢!!!
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=797
1 #include<stdio.h> 2 #include<string.h> 3 int gcd(int m,int n) 4 { 5 if(n==0) 6 return m; 7 else 8 gcd(n,m%n); 9 } 10 int main() 11 { 12 int m,n,k,N; 13 int a[10001]; 14 while(~scanf("%d%d",&m,&n)) 15 { 16 scanf("%d",&N); 17 int count = 1; 18 int mark = 0; 19 memset(a,0,sizeof(a)); 20 for(int i=0;i<N;i++) 21 { 22 scanf("%d",&a[i]); 23 } 24 for(int i=1;i<=m;i++) 25 { 26 for(int j=1;j<=n;j++) 27 { 28 if(gcd(i,j) == a[count] &&count <N) 29 { 30 count++; 31 } 32 else 33 { 34 count = 0; 35 } 36 if(count == N) 37 { 38 mark = 1; 39 break; 40 } 41 } 42 } 43 printf("%s ",mark?"YES":"NO"); 44 mark = 0; 45 } 46 return 0; 47 }