Reduced ID Numbers (同余)

来源:互联网 发布:淘宝等级在哪里查看 编辑:程序博客网 时间:2024/05/26 02:21

题意:给出几个数 ,寻找一个最小数使这几个数mod它的值不相同

解析:暴力枚举从1开始,将模完的数保存在一个数组里,如果遇到相同的值,就增大值继续枚举。直到寻找到。

此处使用了mod[]数组,将模完的结果作为mod[]的下标,这样如果出现相同的值比较好发现(类比Find a multiple(鸽巢原理))

此处应注意超时

#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#define maxn 100010long long  t,n,m,fun[maxn];bool mod[maxn];int main(){    scanf("%lld",&t);    while(t--)    {        scanf("%lld",&n);        for(int i=1;i<=n;i++)            scanf("%lld",&fun[i]);            long long m=1;        while(1)        {            int flag=1;            memset(mod,0,sizeof(mod));            for(int j=1;j<=n;j++)            {                if(mod[fun[j]%m]!=0)                {                    flag=0;                  break;                }                mod[fun[j]%m]=1;            }            if(flag==1)                {                    break;                }            m++;        }        printf("%lld\n",m);    }}


0 0
原创粉丝点击