POJ2769 Reduced ID Numbers 求余应用-暴力

题目链接:http://poj.org/problem?id=2769


题目大意:T.Chur在大学里教授不同群体的学生,每个学生都有一个独特的学生证号码SIN(0到10^6范围内的整数).T.Chur希望在每个分组内找到最小的整数m,使得该组内的所有SIN对m取余的值都不同。


分析:从0开始枚举每一个整数i作为m的值,分别判断分组内有没有两个数对m取余相同即可。可以用一个数组p标记已经出现过的余数。


实现代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 100005
int a[maxn];
bool p[maxn];
int main()
{
    int t,n,ans;
    cin>>t;
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
          scanf("%d",&a[i]);
        for(int i=1;i<maxn;i++)
        {
            memset(p,0,sizeof(p));
            bool flag=true;
            for(int j=0;j<n;j++)
              if(p[ a[j]%i ])
              {
                  flag=false;
                  break;
              }
              else p[ a[j]%i ]=1;
            if(flag)
            {
                ans=i;
                break;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


你可能感兴趣的:(POJ2769 Reduced ID Numbers 求余应用-暴力)