建议改成红题
查看原帖
建议改成红题
929408
2013zhoujy楼主2024/5/4 22:47

这题是绿题,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 记录详情

2024/5/4 22:47
加载中...