洛谷P4136 谁能赢呢? 题解 博弈论
题目链接: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 谁能赢呢? 题解 博弈论的更多相关文章
- 洛谷 P4136 谁能赢呢?
P4136 谁能赢呢? 题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移 ...
- 洛谷P4136 谁能赢呢?
题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...
- 洛谷P4136 谁能赢呢?——博弈
题目:https://www.luogu.org/problemnew/show/P4136 每个人有足够聪明,一定会把图走满: 所以n为偶数先手胜,n为奇数后手胜. 代码如下: #include&l ...
- 洛谷P1288 取数游戏II 题解 博弈论
题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的 ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
随机推荐
- checkbox的全选,取消全选,获得选中值
<html> <head> <title>jq全选以及获得选中项的值</title> <meta charset="utf-8" ...
- [洛谷P4141] 消失之物「背包DP」
暴力:暴力枚举少了哪个,下面套一个01背包 f[i][j]表示到了i物品,用了j容量的背包时的方案数,f[i][j]=f[i-1][j]+f[i-1][j-w[i]]O(n^3) 优化:不考虑消失的, ...
- SQL —— 存储过程
一.什么是存储过程 预先存储好的SQL程序. 保存在SQL Server中(跟视图的存储方式一样) 通过名称和参数执行. 二.存储过程的优点 执行速度更快 允许模块化程序设计 提高系统安全性 减少网络 ...
- Oracle 行转列及列转行
参考网址:http://blog.163.com/fushahui_1988@126/blog/static/82879994201192844355174/ 一.多行转一列select id, vn ...
- httpserver支持路由传输控制器
main.go package main import ( "net/http" "com.jtthink.net/myhttpserver/core" ) t ...
- HTTP请求封装Java工具类
装载自:http://www.open-open.com/lib/view/open1384844838743.html package com.wiker; import java.io.Buffe ...
- vue-cli3 搭建的前端项目基础模板
基于 vue-cli3 搭建的前端模板,fork 或 clone 本仓库,即可搭建完成一个新项目的基础模板,源码地址,欢迎 star 或 fork 特性 CSS 预编译语言:less Ajax: ax ...
- python 基本数据结构 ndarray
- 【POJ 3261】Milk Patterns
[链接]h在这里写链接 [题意] 给你一个长度为n的序列. 问你能不能在其中找到一个最长的子串. 这个子串至少出现了k次. [题解] 长度越长,就越不可能出现k次 后缀数组+二分. N最大为2 ...
- bzoj2424 订货
Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...