Codeforces C. Boboniu and Bit Operations

题意:给定两个长度分别为n,m(2<=m,n<=200)的序列{a1,a2,…an}、{b1,b2…bm}(0<=ai,bi<2^9)。定义序列{c1,c2,…,cn},其中ci=ai&bj(j可以取1~m任意一个),求min(c1 | c2 | … |cn)。

题解:由于ai,bi的范围很小,答案的范围是【0,512),可以考虑暴力求解,将答案ans=0,1,…,511枚举过程中,利用
res=c1|c2|…|cn,则有res | ci==res,因此在枚举res的过程中,只需再稍加判断能否保证res|ci=res即可,若满足,则此res就是答案。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a[205],b[205];
int main()
{
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++) 
			cin>>a[i];
        for(int i=0;i<m;i++) 
			cin>>b[i];
        for(int i=0;i<512;i++) //直接枚举结果 
		{
            bool f=true;
            for(int j=0;j<n;j++)
			{
                f= false;
                for(int k=0;k<m;k++)
				{
                    if(((a[j]&b[k])|i)==i)
					{
                        f=true;
                        break;
                    }
                }
                //一旦有一个a_i找不得相匹配的b_j,就直接break
                if(f==false) 
					break;
            }
            if(f==true)//这里只有当所有的a_i都找到了相匹配的b_j才可到达
			{
                cout<<i<<endl;
                break; 
            }
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值