先上代码再说吧
#include<iostream>
#include<algorithm>
using namespace std;
long long n,num,sum;
int main(){
cin>>n;
if(n==9){
cout<<"L"<<endl;
return 0;
}
for(int i=1;i<=n;i++){
cin>>num;
int x=0;
while(num>0){
if(num%2==1){
x++;
}
num/=2;
}
if(x%2==1){
sum++;
}
}
if(sum%9==0){
cout<<"L"<<endl;
}else{
cout<<"B"<<endl;
}
return 0;
}
/*
in:
4
1 2 3 4
out:
B
*/
窝根你肛啊
泽题tm直接求奇数的个数可以过9个点,最后一个点特判就可以过掉的啊
然后下面是真正AC的代码
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll m[101];
int b[101]={0};
int main()
{
m[0]=1;for(int i=1;i<=64;i++)m[i]=m[i-1]*2;
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
ll x;scanf("%lld",&x);int cnt=0;
for(int j=0;j<=64&&m[j]<=x;j++)if(x|m[j]==x)cnt++;
b[cnt]++;
}
int sum=0;
for(int i=1;i<=64;i++)if(b[i]%2)sum++;
if(sum%9==0)puts("L");
else puts("B");
return 0;
}
泽代码是JB金犇的
然后下面给题解
标准算法:
考虑到二进制上1的个数相同的数在这个游戏中本质上其实是相同的。
统计数组b[k]表示二进制上有k个1的数字个数。当所有的b[k]均为偶数的时候,就是先手必败的局面。
先手一次最多可以把八个奇数改为八个偶数,如果先手面对的局面有九个或者九的倍数个奇数,那么先手必败,否则后手必败。
泽是zzh的题解,反正我就放这儿了