题目大意
- 两个人玩游戏,都已知数X,在[1,N]中猜中X则算输。若没猜中,则缩小范围。
- 假设两人都足够聪明,求对于任意的X属于[1,N],能使得后手赢的X有多少个。
分析
- 类似两堆石子,每堆石子若干个,两个人可在任意一堆石子中捡取若干个,最后一个捡完石子的人胜利。
若要使得后手能够胜利,则必然是先手面临两堆石子数量相等的情况。
若两堆石子数量相等,则后手可捡取先手所捡取得同样数量的石子。从而立于不败之地。 若两堆石子数量不等,则先手可捡取一定若干石子,使得两堆石子数量相等。
- 因此,答案要么是1,要么是0。只有当N是奇数的时候,才会出现两边数的个数相等的情况,从而 ans = n & 1 ? 1 : 0;
代码
#include <iostream>
using namespace std;
int main()
{
int t , n;
cin >> t;
while(t--)
{
cin >> n;
cout << (n & 1 ? 1 : 0) << endl;
}
return 0;
}