题目描述 \text{Alice}Alice 和 \text{Bob}Bob 正在玩一种称为“黑白棋”的游戏。该游戏的规则如下:
游戏在直角坐标系中进行。
\text{Alice}Alice 执黑棋,\text{Bob}Bob 执白棋。
初始时,在直角坐标系中任选 nn 条与 XX 轴平行的直线,直线在 YY 轴上的截距均为整数,且互不相同。\text{Alice}Alice
在每条直线上都会放置一枚黑棋,\text{Bob}Bob 在每条直线上都会放置一枚白棋,棋子位置的 XX
坐标值均为整数。在同一条直线上的两枚棋子位置不会相同。\text{Alice}Alice 和 \text{Bob}Bob 轮流走棋,\text{Alice}Alice
总是先走棋。每名玩家在走棋时,先选择一条直线,然后沿着直线移动该条直线上己方颜色的棋子。每个玩家可以将自己的棋子向着靠近对方棋子的方向一次性移动若干整数单位距离,称之为前进。每个玩家也可以向着远离对方棋子的方向一次性移动若干整数单位距离,称之为后退。只要在前进时不跨过对方的棋子,也不使黑棋和白棋的位置发生重叠,前进的最远距离不限,但是前进的距离至少为
11,如果无法满足前述条件,则玩家不能执行前进操作。为了避免玩家反复后退导致游戏无法结束,在一局游戏中,某个玩家执行后退操作的总次数不能超过
kk 次。与此同时,为了防止游戏区域太大以致在显示游戏状态上造成不便,每次后退的距离至少为 11,但不能超过
dd。如果无法满足前述条件,玩家不能执行后退操作。玩家在轮到自己走棋时,如果能够执行操作就必须执行一次操作,此操作可以是前进操作,也可以是后退操作(如果未超出后退次数的限制)。
如果某个玩家无法执行任何操作来移动自己的棋子,将输掉游戏,游戏结束。
给定游戏的初始状态,假设 \text{Alice}Alice 和 \text{Bob}Bob 在游戏时均采用最佳策略,试确定
\text{Alice}Alice 能否获胜。
直接看成是nim游戏:
/*
https://www.luogu.com.cn/problem/P7589
P7589 黑白棋(2021 CoE-II B)
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t --){
int n, k, d;
cin >> n >> k >> d;
int y, b, w;
int ans = 0;
for(int i = 1; i <= n; i ++){
cin >> y >> b >> w;
ans ^= (abs(b-w)-1);
}
if(ans) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}