CF1719A Chip Game

代码短吧。

Description

一个大小 \(n \times m\) 的棋盘,你要从左下角走到右上角。

每步可以选择向上或向右走任意奇数步,不可走出棋盘,问 \(\text{Burenka}\) 先走,能否获胜。

Analysis

博弈类游戏题。作为 A 题,可以找规律。

Easy version

先不考虑二维,只考虑一维问题,走一条长度为 \(n\)线段谁能获胜。

既然提到了奇数,显然会想到通过奇偶性去解决问题:两人共需走的长度为 \(n\)\(\text{Burenka}\) 每次移动后,二人移动总长度为奇数;\(\text{Tonya}\) 每次移动后,二人移动总长度为偶数。获胜条件是某人走最后一步到达 \(n\)

故若 \(n\) 为奇数,则 \(\text{Burenka}\) 会走最后一步并获胜;反之,若 \(n\) 为偶数,则必然是 \(\text{Tonya}\) 走最后一步并获胜。

Hard version

一维问题考虑清楚后,现在再考虑二维。

如何解决二维问题?由于只能向右或向上移动,所以可以进行降维:不考虑何时转弯,二人需要移动的总长度总为 \(n + m\),因为不能走回头路

即转化为线性(一维)问题:走一条长度为 \(n + m\) 的线段谁能获胜。

Code

思路想通,代码极其简短。

#include <stdio.h>
int n, m;
int main(void) {
    int t; for (scanf("%d", &t); t--; ) {
        scanf("%d %d", &n, &m);
        if (n + m & 1) puts("Burenka"); //判奇偶
        else puts("Tonya");
    }
    return 0;
}

The end. Thanks.

(一键三连

posted @ 2022-08-18 15:16  Dry_ice  阅读(37)  评论(0)    收藏  举报