您的位置:首页 > 其它

hdu 1014 Uniform Generator

2016-05-13 13:31 288 查看
看网上大神说这个题实质上是求最大公约数,看是否两个数的最大公约数为1,是的话就是good;不是的话就是bad;听起来很简便,不过毕竟我是弱鸡,想不明白怎么回事,还是老老实实的按常规思路来吧。

题意很简单,按照给出的公式计算,推算0~mod-1之间的数是否都出现过就行。计算出所有seed然后用个循环遍历一下看是否都有即可。注意seed是循环出现的,所以计算到第一次循环结束就可以了。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int main()

{

int seed[110000],b[110000];

int step,mod,i,j;

while(scanf("%d%d",&step,&mod)!=EOF)

{

seed[0]=0;

int flag=0;

memset(b,0,sizeof(b));

memset(seed,0,sizeof(seed));

for(i=0;i<=mod-1;i++)

{

seed[i+1]=(seed[i]+step)%mod;

b[seed[i+1]]++;

}

for(j=1;j<=mod-1;j++)

{

if(b[j]==0)

{

flag=1;

break;

}

}

if(flag==1)

printf("%10d%10d Bad Choice\n",step,mod);

else

printf("%10d%10d Good Choice\n",step,mod);

printf("\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: