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.
(一键三连

浙公网安备 33010602011771号