标签:poj2769 reduced id numbers 数论 同余 acm
Input
Output
Sample Input
2 1 124866 3 124866 111111 987651
Sample Output
1 8
题目大意:给定一些不超过1e6的数字,让你找一个最小的数k,使得给出的数中没有任何两个数对k同余。
分析:解题思路是十分朴素的实验法。直接从1开始试每个数字看看有没有同余的,如果找到同余则break,直到找到一个合适的数为止。但是有一个问题是在C++上超时但在G++上却AC了,不知道其中的奥妙何在,求大神提点。
上代码:
#include<iostream> #include<algorithm> #include<cmath> #include<map> #include<cstring> using namespace std; const int MAXN = 1e5+10; const int MAXM = 1e6 + 10; int stu[MAXN]; int m[MAXN]; int main() { int kase; cin >> kase; while(kase--) { //memset( mod, 0, sizeof mod ); int n; cin >> n; for(int i = 1; i <= n; i++) cin >> stu[i]; bool flag; int i; for(i = 1; ; i++) { memset( m, 0, sizeof m ); flag = true; for(int j = 1; j <= n; j++) { if(m[stu[j] % i] == 1) { flag = false; break; } else m[stu[j] % i] = 1; } if(flag)break; } cout << i << endl; } return 0; }
解题报告 之 POJ2769 Reduced ID Numbers
标签:poj2769 reduced id numbers 数论 同余 acm
原文地址:http://blog.csdn.net/maxichu/article/details/45642653