这题是绿题,but暴力可以过
直接判断奇偶性就可以过
#include<bits/stdc++.h>
using namespace std;
long long n=1;
int main()
{
for(int i=1;n!=0;i++){
cin>>n;
if(n==0){
return 0;
}
if(n%2==0){
cout<<"Alice"<<endl;
}else{
cout<<"Bob"<<endl;
}
}
return 0;
}
证明方法
众所周知,
奇数^奇数=偶数
奇数^偶数=奇数
偶数^偶数=偶数
还有,根据题目意思,小明先走(Alise),可得:
设这是第i次移动
if(i%2==1) 小明走;
else 小红走;
这题要求是最优解,那么就是让你走完所有格子,所以,去掉起始点之后,如果数量是偶数,那说明最后一步是小红走的,小红赢,输出Bob。
反之,若数量是奇数,那说明最后一步是小明走的,小明赢,输出Alise。
所以这题有两种证明方法:
1:判断奇偶性
讲过,直接特判奇偶.
2:按位异或
只有奇数异或偶数为奇数,所以用1去异或n*n;
1^4 = 00000001^00000100 = 00000101 = 5;
是奇数,小明胜。
1^9 = 00000001^00001001 = 00001000 = 8;
是偶数,小红胜。
测试链接:R158024354 记录详情