比赛 二进制状态压缩 评测结果 AAAAAAAAAA
题目名称 起床困难综合症 最终得分 100
用户昵称 宇战 运行时间 0.811 s
代码语言 C++ 内存使用 9.36 MiB
提交时间 2023-07-27 11:27:03
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    long long n,m,s,o,len;
    struct node{
        int num,x;
    }a[1000050]; 
    int f(int x,int y){
        for(int i=1;i<=n;i++){
            int z=(a[i].x>>y)&1;//找到参数的第y位 
            if(a[i].num==1)x=z&x;
            if(a[i].num==2)x=z|x;
            if(a[i].num==3)x=z^x;
        }
        return x;//返回此位最终结果 
    }//进行n次运算 
    int main(){
        freopen("sleep.in","r",stdin);
        freopen("sleep.out","w",stdout);
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            string u;
            cin>>u>>a[i].x;
            if(u=="AND")a[i].num=1;
            if(u=="OR")a[i].num=2;
            if(u=="XOR")a[i].num=3;
        }//初始化 
        int now=0,d=0;
        for(int i=29/*m最多为29位,t可能大于m*/;i>=0;i--){ 
            if(f(1,i)>f(0,i)&&d+(1<<i)<=m){
                now+=1<<i;
                d+=1<<i;//如果选1初始攻击力增加 
            }else{
                now+=f(0,i)<<i;
            }
        }
        cout<<now;
        return 0;
    }