洛谷 P4136:谁能赢呢?← 棋盘配对博弈(多米诺覆盖博弈)

发布时间:2026/10/18 20:44:34
洛谷 P4136:谁能赢呢?← 棋盘配对博弈(多米诺覆盖博弈) 【题目来源】https://www.luogu.com.cn/problem/P4136【题目描述】小明和小红经常玩一个博弈游戏。给定一个 n×n 的棋盘一个石头被放在棋盘的左上角。他们轮流移动石头。每一回合选手只能把石头向上下左右四个方向移动一格并且要求移动到的格子之前不能被访问过。谁不能移动石头了就算输。假如小明先移动石头而且两个选手都以最优策略走步问最后谁能赢【输入格式】输入文件有多组数据。输入第一行包含一个整数 n表示棋盘的规模。当输入 n 为 0 时表示输入结束。【输出格式】对于每组数据如果小明最后能赢则输出 Alice否则输出 Bob每一组答案独占一行。​​​​​​​【输入样例】20​​​​​​​【输出样例】Alice​​​​​​​【数据范围】对于 20% 的数据保证 1≤n≤10对于 40% 的数据保证 1≤n≤1000对于 100% 数据保证 1≤n≤10000。【算法分析】● 采用棋盘配对博弈多米诺覆盖博弈分析1n 为偶数整张 n*n 棋盘可以完美被若干 1*2 骨牌铺满。先手随便走入某一块骨牌的其中一格后手都可以走到同一块骨牌剩下的另一格。无论先手怎么走后手永远有格子可走最终先手一定会先无路可走 → 先手败后手必胜。2n 为奇数去掉起点格子后剩余棋盘恰好可以被 1*2 骨牌完美覆盖。先手第一步占据中心 / 起点后后手走入任意骨牌一格先手都能对应走到骨牌另一格后手率先无路可走 → 后手败先手必胜。简化判定规则n为偶数先手赢n为奇数后手赢。【算法代码】#include bits/stdc.h using namespace std; int main() { int n; while(cinn n) { if(n%20) coutAlice\n; else coutBob\n; } return 0; } /* in: 2 0 out: Alice */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/163572528https://blog.csdn.net/hnjzsyjyj/article/details/158802453

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询