BZOJ2463 [中山市选2009] 谁能赢呢?
Posted ^m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ2463 [中山市选2009] 谁能赢呢?相关的知识,希望对你有一定的参考价值。
题意:给定n,n×n的棋盘,一个石头放在左上角,两个人轮流移动石头,每次把石头向上,下,左,右四个方向移动一格,要求移动到的格子之前不能被访问过,不能移动石头就算输,两人都用最优策略,问先手胜还是后手胜。
https://www.lydsy.com/JudgeOnline/problem.php?id=2463
首先对于n是偶数,先手胜;n是奇数,后手胜
用1*2骨牌覆盖棋盘。
n为偶数时一定可以覆盖,每次先手走前一步所在骨牌另一端,先手必胜。
n为奇数时去掉左上角第一格一定能被骨牌覆盖,但是先手从左上角走,必须走到一个没有走过的骨牌内,每次后手走前一步所在骨牌另一端,后手必胜。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #include<vector> 7 8 using namespace std; 9 10 template <typename tn> void read (tn & a) { 11 tn x = 0, f = 1; 12 char c = getchar(); 13 while (c < ‘0‘ || c > ‘9‘){ if (c == ‘-‘) f = -1; c = getchar(); } 14 while (c >= ‘0‘ && c <= ‘9‘){ x = x * 10 + c - ‘0‘; c = getchar(); } 15 a = f == 1 ? x : -x; 16 } 17 18 int main() { 19 int n; 20 read(n); 21 while (n) { 22 if (n % 2 == 0) { 23 printf("Alice\n"); 24 } 25 else { 26 printf("Bob\n"); 27 } 28 read(n); 29 } 30 return 0; 31 }
以上是关于BZOJ2463 [中山市选2009] 谁能赢呢?的主要内容,如果未能解决你的问题,请参考以下文章