2 条题解
-
0
事先在洛谷上做过这道题目。 我们设计两个变量 ,让 ,我们遇到一个操作,我们就让这两个数都干这种操作,最后我们从 到 枚举,每一次我们让 取反,注意,如果取反后的 ,直接终止循环即可。如果 a>>i&1 我们就让答案加上 ,还有一种情况:b>>i&1 而且 时,我们可以让答案加上 ,让 减去 ,但是我们优先选择第一种,我们只选其中的一个即可,具体可以看代码。 Code:
#include<bits/stdc++.h> #define int long long #define I_love_ch ios::sync_with_stdio(0) #define China cin.tie(0) #define France cout.tie(0) #define ch_France return 0 using namespace std; int n,l,x,a=0,b=-1; char ch; signed main(){ I_love_ch; China; France; cin>>n>>l; while(n--){ cin>>ch>>x; if(ch=='&'){ a&=x; b&=x; } if(ch=='|'){ a|=x; b|=x; } if(ch=='^'){ a^=x; b^=x; } } int ans=0; for(int i=30;~i;i--){ if(a>>i&1) ans=ans+(1<<i); else if((b>>i&1)&&(1<<i)<=l){ ans=ans+(1<<i); l=l-(1<<i); } } cout<<ans<<"\n"; ch_France; }可能有些地方说的不是很准确
- 1
信息
- ID
- 601
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 29
- 已通过
- 9
- 上传者