zoukankan      html  css  js  c++  java
  • HDU 4149 Magic Potion

    意甲冠军:

    a[i] ^ x = f[i] ( i = 1...8 ) 和 ( a[1] + a[2] + ... + a[8] ) ^ x = f[9] 如今f为已知  求x


    思路:

    从低位到高位确定x值  做法见凝视


    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int f[20],t,ans;
    
    int main()
    {
        int i,k,j;
        scanf("%d",&t);
        while(t--)
        {
            ans=0;
            f[0]=0; //用来存a[1]^a[2]^...^a[8]
            for(i=1;i<=8;i++)
            {
                scanf("%d",&f[i]);
                f[0]^=f[i];
            }
            scanf("%d",&f[9]);
            for(i=k=0;i<32;i++)
            {
                //printf("%d %d %d
    ",i,ans,k);
                if(f[0]&(1<<i)) j=(k+1)%2; // k为进位 j为a[1]+a[2]+...+a[8]的第i位
                else j=k%2;
                if(f[9]&(1<<i)) //能够求出x的第i位是不是1
                {
                    if(!j) ans|=(1<<i);
                }
                else
                {
                    if(j) ans|=(1<<i);
                }
                for(j=1;j<=8;j++) //利用前8个等式和求出的x的第i位确定a的第i位
                {
                    if(f[j]&(1<<i))
                    {
                        if(ans&(1<<i));
                        else k++;
                    }
                    else
                    {
                        if(ans&(1<<i)) k++;
                    }
                }
                k/=2; //再次进位
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    值类型和引用类型
    0513二分查找练习
    0512随机4位验证码
    0511java 随机6个不同的彩票数
    随机数的产生机制
    0510Java 练习
    0509java练习题
    java循环作业
    字符集的由来及发展
    hdu2577_键入字母
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4889683.html
Copyright © 2011-2022 走看看