题解:P12420 【MX-X12-T3】「ALFR Round 5」变换
题目传送门
思路
容易证明,每次操作总会选择
所以,本题的
可以看作先将预处理出
但这么做并没有得到满分,why?
注意到,当每一个
所以,我们要判断是否存在某些位,所有
此时,只需要增加一个变量
最后,如何通过
注意到,当某一位上
-
ans=sum|((m \oplus p)\&m)
有了这个,本题就迎刃而解。
AC CODE
#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,ans,p;
inline int read(){
int p=1,k=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') p=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=k*10+c-'0';
c=getchar();
}
return p*k;
}
int main(){
T=read();
while(T--){
n=read(),m=read(),k=read(),ans=0,p=2147483647;
for(int i=0;i<n;++i){
int a;
a=read();
ans^=a;
p&=a;
}
ans=ans|((m^p)&m);
printf("%d\n",ans);
}
return 0;
}
加入快读以后可以跑到 100~200ms 哦!awa