题意:给你两个序列a和b,让你计算一个c序列,c[i]=a[i]&b[j](同一个b中的元素可以被使用多次),让你求c[1] | c[2] | … | c[n]最小的那个值。
思路:暴力枚举c的值(0-2^9)。vis[i][j]表示前i个数能构建出j。刷表刷出所有情况即可。
var readline=require("readline");
var rl=readline.createInterface({
input:process.stdin,
output:process.stdout
});
var arr=[],a,b,n,m;
rl.on('line',function(inp){
arr.push(inp);
var len=arr.length;
if(len===1){
n=parseInt(arr[0].split(' ')[0]);
m=parseInt(arr[0].split(' ')[1]);
}else if(len===2){
a=arr[1].split(' ');
for(var i=0;i<n;i++) a[i]=parseInt(a[i]);
}else if(len===3){
b=arr[2].split(' ');
for(var i=0;i<m;i++) b[i]=parseInt(b[i]);
var C=Math.pow(2,9),vis=new Array(201);
for(var i=0;i<201;i++) vis[i]=new Array(C+1).fill(0);
for(var i=0;i<n;i++){
for(var j=0;j<m;j++){
var ab=a[i]&b[j];
for(var k=0;k<C+1;k++){
if(i>0&&vis[i-1][k]) vis[i][k|ab]=1;
}
if(i===0) vis[i][ab]=1;
}
}
for(var i=0;i<=C;i++){
if(vis[n-1][i]){
console.log(i);
process.exit(0);
}
}
}
});