CF1395C Boboniu and Bit Operations
阿新 • • 發佈:2021-12-14
題目大意:有兩個非負整數序列\(a_1,a_2...a_n\),\(b_1,b_2...b_m\),對於每個\(i(1\le i\le n)\),你可以選擇一個\(j(1\le j\le m)\),並使得\(c_i=a_i\&b_j\) 求出\(c_1|c_2|...|c_n\)的最小值
\((0\le a_i,b_i\lt 2^9,1\le n,m\le200)\)
思路:首先觀察一下資料範圍\(a_i,b_i\lt 2^9\),或運算之後最終結果肯定也小於512,並且\(1\le n,m\le200\),那我們可以直接暴力列舉\(0\le ans\le 512\)
Code:
#include <bits/stdc++.h> using namespace std; const int N=250,mod=1e9+7; typedef long long ll; int n,m,a[N],b[N]; bool check(int x){ for(int i=1;i<=n;i++){ bool flag=true; for(int j=1;j<=m;j++){ if(((a[i]&b[j])|x)==x){ flag=false; break; } } if(flag) return false; } return true; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>b[i]; for(int i=0;i<=512;i++){ if(check(i)){ cout<<i<<endl; break; } } return 0; }