记录编号 593353 评测结果 AAAAAAAAAA
题目名称 [NOI 2014]起床困难综合症 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 C++ 运行时间 0.580 s
提交时间 2024-08-30 20:13:34 内存使用 4.40 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[200010][2],ans=1,sum,cnt,num=1,res;
int find(int k){
    num=1;
    for(int i=1;i<=n;i++){
//        cout<<num<<" "<<k<<" "<<a[i][1]<<" "<<((a[i][2]>>k)&1)<<endl;
        if(a[i][1]==1)
        num&=((a[i][2]>>k)&1);
        else if(a[i][1]==2)
        num|=((a[i][2]>>k)&1);
        else
        num^=((a[i][2]>>k)&1);
//        cout<<num<<endl;
    }
    return num;
}
int main(){
    freopen("sleep.in","r",stdin);
    freopen("sleep.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
	    string b;
	    cin>>b;
	    if(b[0]=='A'){
	        a[i][1]=1;
        }
        else if(b[0]=='O'){
            a[i][1]=2;
        }
        else{
            a[i][1]=3;
        }
        cin>>a[i][2];
    }
	for(int i=0;i<=29;i++){
	    int x=ans*find(i);
	    if(sum+x>m)
	    break;
	    else
	    sum+=x;
	    ans=ans*2;
    }
    for(int i=1;i<=n;i++){
        if(a[i][1]==1)
        sum&=a[i][2];
        else if(a[i][1]==2)
        sum|=a[i][2];
        else
        sum^=a[i][2];
    }
    cout<<sum;
	return 0;
}