zoukankan      html  css  js  c++  java
  • hihocoder #1509 : 异或排序

    很有意思的题 中文 

    一开始拿到这个题没头绪

    2^60的话  考虑相邻2个数 

    a     0 1  0  1  0  0

    b     0  0 1 0 0 0 0

    他们最高位不相同的  相同的异或同一个数还是相同所以考虑这位  0  1   那么s这位一定要是  0  ,  0 1   就相反  然后都不能矛盾 这样就解决了 

    #include<cstdio>
    #include<cstring>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<map>
    #include<queue>
    #include<vector>
    using namespace std;
    
    
    #define inf  1000000007
    #define ll long long
    #define MAXN   1010
    
    ll z[MAXN];
    int d[MAXN][80];
    int p[MAXN];
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(d,0,sizeof(d));
            memset(p,-1,sizeof(p));
            for(int i=1;i<=n;i++)
                scanf("%lld",&z[i]);
            for(int i=1;i<=n;i++)
            {
                for(int j=0;j<=59;j++)
                {
                    
                    d[i][j]=(z[i]&((ll)1<<j));
                }
            }
            int ok=0;
            for(int i=2;i<=n;i++)
            {
                for(int j=59;j>=0;j--)
                {
                    if(d[i][j]!=d[i-1][j])
                    {
                        if(d[i][j]==0&&d[i-1][j]==1)
                        {
                            if(p[j]==-1)
                            {
                                p[j]=1;
                            }
                            else if(p[j]==0)
                                ok=1;
                        }
                        else
                        {
                            if(p[j]==-1)
                            {
                                p[j]=0;
                            }
                            else if(p[j]==1)
                                ok=1;
                        }
                        break;
                    }
                }
            }
            ll ans;
            if(ok==1)
                ans=0;
            else
            {
                int cnt=0;
                for(int i=0;i<60;i++)
                    if(p[i]==-1)
                        cnt++;
                ans=(ll)1<<cnt;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code

     

  • 相关阅读:
    java包和jar包
    java异常总结
    java异常练习2
    java中的异常处理机制_函数覆盖时的异常特点
    React(三)TableBar,ToDoList,Redux案例
    React(二)组件通信
    React(二)组件通信
    React(一)起步
    React(一)起步
    Vue(二)进阶
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/7793997.html
Copyright © 2011-2022 走看看