题目链接:https://www.luogu.org/problem/P4136

找规律

首先这道题目我没有什么思路,所以一开始想到的是通过搜索来枚举 \(n\) 比较小的时候的情况。

所以我开搜索枚举了 \(n \le 8\) 的所有情况。

搜索代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 11;
int n;
bool vis[maxn][maxn], res[maxn][maxn];
int dir[4][2] = { -1, 0, 1, 0, 0, -1, 0, 1 };
inline bool in_map(int x, int y) { return x >= 0 && x < n && y >= 0 && y < n; }
bool dfs(int x, int y) {
vis[x][y] = true;
res[x][y] = false;
bool flag = false;
for (int i = 0; i < 4; i ++) {
int xx = x + dir[i][0], yy = y + dir[i][1];
if (!in_map(xx, yy) || vis[xx][yy]) continue;
dfs(xx, yy);
if (!res[xx][yy]) {
res[x][y] = true;
break;
}
}
vis[x][y] = false;
}
void check() {
printf("check (%d) : ", n);
memset(vis, 0, sizeof(vis));
memset(res, 0, sizeof(res));
dfs(0, 0);
puts(res[0][0] ? "YES" : "NO");
}
int main() {
for (n = 1; n <= 8; n ++) check();
return 0;
}

输出结果是:

check (1) : NO
check (2) : YES
check (3) : NO
check (4) : YES
check (5) : NO
check (6) : YES
check (7) : NO
check (8) : YES

所以,可以发现:当 \(n\) 为偶数时,先手胜,当 \(n\) 为奇数时,后手胜。

然后这道题目就这样通过 找规律 找到了一个假想的规律。

然后就AC了:

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
while ( (cin >> n) && n ) {
puts( (n % 2 == 0) ? "Alice" : "Bob" );
}
return 0;
}

然后证明转自 Shallowy大神的博客

想象一下,可以 把整个棋盘拆成若干个1*2的格子 ,那么,

很明显,后手只是从一个小格子的一侧走到了另一侧;

而先手则找到了一个新的格子。

因为后手只需走,但先手要找,所以在某个时刻游戏结束时,一定是先手找不到格子了...

当n为偶数时,棋盘能完美地被拆掉——可是先手会找不到;当n为奇数时,先手才能赢。

洛谷P4136 谁能赢呢? 题解 博弈论的更多相关文章

  1. 洛谷 P4136 谁能赢呢?

    P4136 谁能赢呢? 题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移 ...

  2. 洛谷P4136 谁能赢呢?

    题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...

  3. 洛谷P4136 谁能赢呢?——博弈

    题目:https://www.luogu.org/problemnew/show/P4136 每个人有足够聪明,一定会把图走满: 所以n为偶数先手胜,n为奇数后手胜. 代码如下: #include&l ...

  4. 洛谷P1288 取数游戏II 题解 博弈论

    题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的 ...

  5. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  6. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  7. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  8. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  9. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

随机推荐

  1. 【模板】ST表 洛谷P1816 忠诚

    P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于 管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨, ...

  2. Spring Boot → 06:项目实战-账单管理系统

    Spring Boot → 06:项目实战-账单管理系统

  3. 【python小随笔】celery周期任务(简单原理)

    1:目录结构 |--celery_task |--celery.py # 执行任务的main函数 |--task_one # 第一个任务 |--task_two # 第2个任务 . . . . |-- ...

  4. .net core/.net 使用 CommandLineParser 来标准化地解析命令行

    CommandLineParser 是一款用于解析命令行参数的 NuGet 包.你只需要关注你的业务,而命令行解析只需要极少量的配置代码. 本文将介绍如何使用 CommandLineParser 高效 ...

  5. pytest fixture中scope试验,包含function、module、class、session、package

    上图是试验的目录结构 conftest.py:存放pytest fixture的文件 import uuid import pytest @pytest.fixture(scope="mod ...

  6. 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?

    摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通过算法生成模型去帮助我们快速的做出选择,而且保证误差最小.充足的样本,合适 ...

  7. Python比较有用的小语法

    额,这是在Codeforces做题的时候从Virtual judge那儿学的 #ord()内置函数,将单个字符变为int#chr()内置函数,将int变为单个字符# for : else ( 或 wh ...

  8. 【itsdangerous】的加密解密原理(易懂版)

    from itsdangerous import TimedJSONWebSignatureSerializer import time from itsdangerous import Signat ...

  9. JS放在body与head中的不同

    放在body和head其实差不多的,只不过是文档解析的时间不同.浏览器解析html是从上到下的.如果把javascript放在head里的话,则先被解析,但这时候body还没有解析,所以$(#btn) ...

  10. c++编译错误:invalid new-expression of abstract class type

    原因: 出现这个错误原因是new 了一个抽象类出错,说明父类(接口)中有纯虚函数没有实现.接口里的纯虚函数全部需要实现,这样才能new 子类. 例如: 纯虚函数例如 ; 是纯虚函数,不是纯虚函数不作要 ...