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;
}
View Code

相关文章: