zoukankan      html  css  js  c++  java
  • Codeforces Round #664 (Div. 2) C. Boboniu and Bit Operations

    传送门:cf1395C

    题意

    c[i]=a[i]&b[j],b[j]是b数组中任意一个,求c[1] | c[2] | ... | c[n]最小值。

    题解

    经典的二进制枚举答案,因为a和b的最大值<29 ,所以最后的结果最大是9个位置全1,不会超过210 ,故只要枚举0到210-1即可。每次答案和a[i]&b[j]的值相与,如果有一个 j 可以使相与后答案不变,那么当前a[i]可以,如果没有,那么当前答案不可以。当所有a[i]都可行,输出答案,否则继续枚举。

    代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a[100100];
     5 int b[100100];
     6 
     7 int main()
     8 {
     9     ios::sync_with_stdio(false);
    10     cin.tie(0);
    11     cout.tie(0);
    12     int n,m;
    13     cin>>n>>m;
    14     for(int i=0;i<n;i++) cin>>a[i];
    15     for(int i=0;i<m;i++) cin>>b[i];
    16     for(int i=0;i<(1<<10);i++){
    17         int flag1=1;
    18         for(int j=0;j<n;j++){
    19             int flag2=0;
    20             for(int k=0;k<m;k++){
    21                 if((i|(a[j]&b[k]))==i){flag2=1; break;}
    22             }
    23             if(!flag2) {flag1=0;break;}
    24         }
    25         if(flag1) {cout<<i<<endl;return 0;}
    26     }
    27     return 0;
    28 }
  • 相关阅读:
    wait waitpid
    达梦备份还原
    sigprocmask阻塞信号
    sigaction信号处理
    dd命令
    linux系统启动过程
    cpio建立、还原备份档
    configure详解
    Git入门基础教程
    一篇文章了解Github和Git教程
  • 原文地址:https://www.cnblogs.com/lilibuxiangtle/p/13494679.html
Copyright © 2011-2022 走看看