CF1719A Chip Game Solution

· · 题解

CF1719A Chip Game

link

题意:两个人在一个 n\times m 的棋盘上玩游戏,石子初始在 (1,1),每次可以把石子向下或向右移动奇数个格子,问谁能把棋子移到终点。

其实 @_zyINF 已经把思路说的比较清楚了,就是判断 nm 是否奇偶性相同。

原因就是每次的增量是奇数,而两人移动过一轮棋子后增量的和就变成了偶数。因此移动过一轮的棋子的坐标相加也是偶数。

所以问题就变为了判断给出的两个数奇偶性相不相同。

完整代码:

#include<bits/stdc++.h>
#define int long long
#define rg register int
using namespace std;
int n, m;
signed main()
{
    int T;
    cin >> T;
    while (T--)
    {
        cin >> n >> m;
        if ((n & 1) != (m & 1)) cout << "Burenka\n";
        else cout << "Tonya\n";
    }
    return 0;
}

加强

这里给出一个加强版:

两个人挪石子,给出一个起点,每次能向下或向右移动奇数格棋子,最终到达 (n,m) 的人获胜。请编写程序来判断先手胜还是后手胜。

输入:

四个数,n,m,x,y,分别表示终点坐标和起点坐标。

输出:

如果先手胜,输出 1,否则输出 2

Sol

我们在上一道题中之所以只用判断 n,m 奇偶性相同,就是因为起点的 (1,1) 的和就是偶数。现在题目要求输入起点了,我们就要对起点做出奇偶性的判断了。剩下的和上一道题一样。

代码不放了,有兴趣的同学可以自己试试写一写。