PKU 2144 Leaky Cryptography 题解

把所有数字用%x读进来
然后按二进制从第一个开始依次处理就好了
每次先判断这个k的这个位置是0是否可以满足题意如果不可以那便是1
然后每次做一个验证就可以了
 1#include<stdio.h>
 2int a[8],b[32];
 3int main()
 4{
 5int KASE,i,sum,t,ans,j,l;
 6scanf("%d",&KASE);
 7while(KASE--)
 8{
 9for(i=0;i<32;i++)b[i]=0;
10for(i=0;i<8;i++)scanf("%x",&a[i]);
11//    for(i=0;i<8;i++)printf("%d ",a[i]);printf("\n");
12scanf("%x",&sum);ans=0;
13for(i=0;i<32;i++)
14{
15t=0;
16for(j=0;j<8;j++)t+=(a[j]^0)&1;
17t=(t+ans)&1;
18if(t==(((sum)^0)&1))b[i]=0;
19else b[i]=1;
20//printf("%d %d %d %d\n",t,(((sum)^0)&1),b[i],i);
21t=0;
22if(b[i]==1)for(j=0;j<8;j++)t+=(a[j]^1)&1;
23else for(j=0;j<8;j++)t+=(a[j]^0)&1;
24for(j=0;j<8;j++)a[j]=a[j]>>1;
25ans=(ans+t)>>1;
26sum=sum>>1;
27}

28ans=0;
29for(i=31;i>=0;i--)
30{
31ans=ans+(b[i]<<i);
32//printf("%d",b[i]);
33//    if(i%4==0)printf(" ");
34}

35//    printf("\n");
36printf("%x\n",ans);
37}

38return 0;
39}

40

posted on 2008-07-19 19:25 gong 阅读(806) 评论(1)  编辑 收藏 引用

评论

# re: PKU 2144 Leaky Cryptography 题解 2008-07-20 09:59 未央

唉,我这题根本没明白让我干嘛,你的解题报告很有帮助,谢谢  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(6)

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜