本文主要是介绍#2. 【NOI2014】起床困难综合症,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
拆分二进制
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define LL long long
LL n,m;
int to0[40],to1[40]; // 30
char s[30];
int main()
{
// freopen("a.in","r",stdin);
// freopen("wa.out","w",stdout);scanf("%lld %lld",&n,&m);for(int i=1;i<=30;i++) to1[i]=1;for(int i=1;i<=n;i++){LL tmp;scanf("%s %lld",s+1,&tmp);if(s[1]=='A'){for(int i=1;i<=30;i++){int x=tmp%2;tmp>>=1;to0[i]=to0[i]&x;to1[i]=to1[i]&x;}}else if(s[1]=='O'){for(int i=1;i<=30;i++){int x=tmp%2;tmp>>=1;to0[i]=to0[i]|x;to1[i]=to1[i]|x;}}else{for(int i=1;i<=30;i++){int x=tmp%2;tmp>>=1;to0[i]=to0[i]^x;to1[i]=to1[i]^x;}}}LL ans=0;LL sum=0;for(int i=30;i>=1;i--){if(to1[i]>to0[i]&&(sum+(1ll<<(i-1)))<=m){sum+=(1ll<<(i-1));ans<<=1;ans^=to1[i];}else{ans<<=1;ans^=to0[i];}}printf("%lld\n",ans);return 0;
}
这篇关于#2. 【NOI2014】起床困难综合症的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!