csu1323
n为M二进制保留最高位,分开2部分来异或,大于等于n的 和 小于n的。
#include<cstdio> #include<iostream> #include<cstring> #include<string> #include<vector> #include<algorithm> #include<time.h> #include<stdlib.h> #include<cmath> using namespace std; int batt[100005]; int main() {int N,M;while(scanf("%d%d",&N,&M)!=EOF){int a[2];a[0]=a[1]=0;int ans=0;for(int i=0;i<N;i++){scanf("%d",&batt[i]);if(i<2){ans^=batt[i];a[i]=batt[i];}}sort(batt,batt+N);int flag=0;int k=0,b=1;int m=ceil(log((double)M));m=1<<m;for(int i=0;i<N;i++){if(batt[i]>=m){k=i;break;}}for(int i=0;i<k&&b;i++){for(int j=k;j<N;j++){if((batt[i]^batt[j])>M){flag=1;b=0;break;}}}if(flag)puts("YES");elseputs("NO");}return 0; }
更多推荐
csu1323
发布评论