[UOJ#2] [NOI2014] 起床困难综合征

来源:互联网 发布:足球推荐软件 编辑:程序博客网 时间:2024/04/30 20:11
这道题说起来还是挺简单的吧,按位考虑就能过了qwq
#include "algorithm"#include "iostream"#include "stdarg.h"#include "stdlib.h"#include "string.h"#include "stdio.h"#include "fstream"#include "math.h"#include "stack"#include "queue"#include "map"using namespace std;const int SIZE=100005;int n,m,ans;int door[SIZE],r[SIZE];int main(){    char ch[10];    cin>>n>>m;    for (int i=1; i<=n; i++){        scanf("%s%d",ch,door+i);        if (ch[0]=='A') r[i]=1;        else if(ch[0]=='O') r[i]=2;        else r[i]=3;    }    for (int i=1<<30; i; i>>=1){        int a=0,b=1;        for (int j=1; j<=n; j++){            int c=(door[j]&i)/i;            if (r[j]==1) a&=c,b&=c;            else if(r[j]==2) a|=c,b|=c;            else a^=c,b^=c;        }        if(a) ans+=i;        else if(b&&m>=i){             ans+=i,m-=i;        }    }    cout<<ans<<endl;    return 0;}


                                             
0 0