题意:
给定[1,N]范围猜数字,且猜测双方一开始就知道X,假设双方采取最优策略,猜中的人输,求后手胜利的X个数
分析:
考虑问题的等价问题,对于一个X,将序列分为[1,X−1]和[X+1,N]
那么每次猜测一个数字即为取这两堆数字中的其中一堆的一些数字
比如说猜测Y在第二个范围,那么剩余序列为[1,Y−1],即为取了[Y,N],显然这就是一个Nim游戏了
那么当且仅当N为奇数且X=N/2时,后手必胜,此时当前局面的Nim和为0,因为左右两个序列的数字个数相等
考虑构造一个必胜策略,先手无论怎么取,后手只要在另一堆中和先手取的个数一样就可以必胜了
比如就如前面那个剩余[1,Y−1],只要先手猜Z,此时剩余[Z+1,Y−1],假设Z=N−Y+1
N为偶数时,当前Nim和不为0,后手必败
所以本题答案为printf("%d\n", N & 1);