您的位置:首页 > 其它

POJ 3652 Persistent Bits (位运算,模拟)

2013-10-30 12:38 253 查看
直接模拟即可,因为最大周期已知,所以可以直接开数组检测周期

然后就是取出每一位,如果都一样,就输出,不一样就输出‘?’

#include <stdio.h>
#include <string.h>
unsigned int ans[65537];
unsigned char check[65537];
int main(void)
{
unsigned int A,B,C,S;
unsigned int count=0,i=0,base=0,a,j=0;
while(scanf("%d ",&A)&&A)
{
scanf("%d %d %d",&B,&C,&S);
memset(check,0,sizeof(check));
count=0;
while(!check[S])
{
check[S]=1;
ans[count++]=S;
S=(A*S+B)%C;
}
base=1<<15;
for(i=0;i<16;++i)
{
a=ans[0]&base;
for(j=1;j<count;++j)
{
if(a!=(ans[j]&base))
{
break;
}
}
if(j!=count)
{
putchar('?');
}
else
{
0==a?putchar('0'):putchar('1');
}
base>>=1;
}
putchar('\n');
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: