【NOI2014】起床困难综合症

来源:互联网 发布:无root备份应用数据 编辑:程序博客网 时间:2024/04/27 17:39

这就是一道水题,虽然本弱渣并没有想出来。

我们可以发现三个运算符都是位运算符,也就是各个位互不影响,我们用全是30位全是零和30位全是1的数去进行运算,然后从高位到低位使用贪心算法即可。

注意各个运算符的优先级,没有把握的请打括号。

# include <cstdio># include <cstdlib># include <cctype># include <ctime># include <cmath># include <cstring># include <string># include <iostream># include <algorithm>using namespace std;int n,m,f[2],maxx;char s[10];int main(){//freopen("1.in","r",stdin);int i,j,i1,i2=0;scanf("%d%d",&n,&m);f[1]=(1<<30)-1;for(i=1;i<=n;++i){    scanf("%s%d",s,&i1);switch(s[0]){    case 'A': f[0]&=i1; f[1]&=i1;break;    case 'O': f[0]|=i1; f[1]|=i1;break;    case 'X': f[0]^=i1; f[1]^=i1;break;}}for(i=29;i>=0;--i)if(f[0]&(1<<i)) maxx|=1<<i;else if((i2|(1<<i))<=m&&f[1]&(1<<i)) {maxx|=1<<i; i2|=1<<i;}cout<<maxx<<"\n";return 0;}


0 0
原创粉丝点击