B .Aesthetics in poetry
题意:给定N个数,(N<2000 ,a[i] <=1e9),让你找一个最大的K,使得N个数膜K的余数个数全都等于N/K个。
思路:我们找到N的因子,然后验证即可,复杂度O(N^2)
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int maxn=1000010; int a[maxn],N,ans=-1,num[maxn]; void get(int k) { rep(i,0,k-1) num[i]=0; rep(i,1,N) num[a[i]%k]++; bool F=true; rep(i,0,k-1) if(num[i]!=N/k) F=false; if(!F) return ; if(ans==-1) ans=k; else ans=min(ans,k); } int main() { scanf("%d",&N); rep(i,1,N) scanf("%d",&a[i]); for(int i=2;i*i<=N;i++){ if(N%i==0) { get(i); if(i*i!=N) get(N/i); } } get(N); printf("%d\n",ans); return 0; }