• CodeForces 165E Compatible Numbers


    题目:http://codeforces.com/problemset/problem/165/E

    题意:给你n个数,对每个数,让你找任意一个在这些数中&它等于0的数,如果没有输出-1

    技巧题,对于任意一个数x的答案,同时也是对x去掉任意一位2进制为1的数的答案

    例如 10101的答案一定是10001的答案

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    using namespace std;
    const int N=1e6+5;
    int dp[1<<22];
    int n,a[N];
    int main()
    {
        scanf("%d",&n);
        int tot=(1<<22)-1;
        memset(dp,-1,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            dp[tot^a[i]]=a[i];
        }
        for(int i=tot;i>=0;i--)
        {
            if (dp[i]!=-1) continue;
            for(int j=0;j<22;j++)
                if (dp[i|1<<j]!=-1)
                dp[i]=dp[i|1<<j];
        }
        for(int i=1;i<n;i++)
            printf("%d ",dp[a[i]]);
        printf("%d
    ",dp[a[n]]);
        return 0;
    }
    

      

  • 相关阅读:
    ACM-生化武器
    ACM-Antiprime数
    ACM-寻宝
    ACM-小偷的背包
    ACM-吴奶奶买鱼
    ACM-挑战题之排列生成
    ACM-数细胞
    ACM-售货员难题
    学习《linux》课程
    MATLAB 求圆形面积
  • 原文地址:https://www.cnblogs.com/bk-201/p/7469847.html
Copyright © 2020-2023  润新知