把所有数字用%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