?
解题思路:
求组内最小的m使得组内各个数对m求余所的值均不同。暴力的判断吧。发现一个有趣的规律,G++省时间废内存,C++费时间省内存。另外此题的数组不宜开的过大,我开了个10^6的数组,接下来各种超时,换成10^5就过了。
另外,我试了下用set结果还是超时。
?
完整代码:
?
#include#include #include #include #include #include using namespace std; typedef long long LL; const int maxn = 100001; int a[maxn] , b[maxn]; int n; inline bool check(int m) { memset(b , 0 , sizeof(b)); for(int i = 0 ; i < n ; i ++) { if(b[a[i] % m]) return false; else b[a[i] % m] = 1; } return true; } int main() { #ifdef DoubleQ freopen(in.txt , r , stdin); #endif; int T; scanf(%d,&T); while(T--) { scanf(%d,&n); for(int i = 0 ; i < n ; i ++) scanf(%d,&a[i]); int m; for(m = 1 ; m < maxn ; m ++) { if(check(m)) { printf(%d , m); break; } } } return 0; }
?
?