ACM_小游戏(棋盘博弈)
Problem Description:
最近kiki无事可做,于是他想玩棋盘游戏。棋盘的大小是n * m。首先,棋子放置在右上角(1,m)。 每次可以将棋子向左方,下方或左下方移动一个位置。当移动到(n,1)时就无法移动,无法移动的人失败。 kiki和bibi一起玩。游戏总是从kiki开始。 如果两者都完美发挥,谁会赢得比赛?
Input:
输入包含多个测试用例。 每行包含两个整数n,m(0 <n,m <= 2000)。 当n = 0和m = 0时输入终。
Output:
如果kiki赢,输出kiki;如果bibi赢,输出bibi。
Sample Input:
5 3
5 4
6 6
0 0
Sample Output:
bibi
kiki
kiki
解题思路:这道题比赛的时候推算了半天(QAQ表示当时还没学到博弈)才发现只要给出的n*m的结果是奇数则后手(bibi)就胜利,否则(偶数)先手(kiki)胜利。
证明:贴一张P/N图关于先手的输赢状态:
说明:状态P:先手只要最后是状态P,即此时无法再移动,则后手必赢,先手必输。
状态N:先手只要最后是状态N,后手就无法再移动,即先手必赢,后手必输。
现在关于P,N的求解有三个规则(前提:两者移动的每一步都保证是最优策略)
(1):最终态都是P
(2):按照游戏规则,到达当前态的前态都是N的话,当前态是P
(3):按照游戏规则,到达当前态的前态至少有一个P的话,当前态是N
综上,通过P/N图的分布规律,可以得出结论:如果n*m是偶数,则先手必赢,否则后手必赢。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m && (m+n)){
if(m*n%==)cout<<"kiki"<<endl;//只要n*m为偶数,则先手必赢
else cout<<"bibi"<<endl;//否则后手必赢
}
return ;
}
杭电hdu2147和此题几乎完全一样,只是输出不一样而已。题目链接:hdu 2147 kiki's game
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m && (m+n)){
if(m*n%)cout<<"What a pity!"<<endl;//先手必输
else cout<<"Wonderful!"<<endl;//先手必赢
}
return ;
}
ACM_小游戏(棋盘博弈)的更多相关文章
- 基于HTML5实现五彩连珠小游戏
今天给大家分享一款基于HTML5实现五彩连珠小游戏.这款游戏的规则:点击彩球移动到期望的位置,每移动一次,画面将随机出现3个新的彩球:当同一颜色的彩球连成5个一行或一列或一斜线时,这5个彩球同时消失, ...
- web版扫雷小游戏(一)
作为一名程序猿,平时的爱好也不多,说起游戏,我不太喜欢大型的网游,因为太耗时间,偶尔玩玩经典的单机小游戏,比如windows下自带的游戏扫雷(秀一下,高级下最高纪录110s). 现阶段正在致力于web ...
- javascrpit开发连连看记录-小游戏
工作之余,总想做点什么有意思的东西.但是苦于不知道做什么,也就一直没有什么动作.在一个午饭后,跟@jedmeng和@墨尘聊天过程中,发现可以写一些小东西来练练手,有以下几点好处: 1. ...
- 介绍一款Android小游戏--交互式人机对战五子棋
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编 ...
- js小游戏:五子棋
使用纯js的小游戏,五子棋 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- C++ MFC棋牌类小游戏day1
好用没用过C++做一个完整一点的东西了,今天开始希望靠我这点微薄的技术来完成这个小游戏. 我现在的水平应该算是菜鸟中的战斗鸡了,所以又很多东西在设计和技术方面肯定会有很大的缺陷,我做这个小游戏的目的单 ...
- 小游戏——js+h5[canvas]+cs3制作【五子棋】小游戏
五子棋小游戏学习—— 有一个问题是,棋盘线的颜色,在canvas中,明明设置了灰色,但在我的预览中还是黑色的,很重的颜色. 以下是复刻的源码: <!DOCTYPE html> <ht ...
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】
一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
- BZOJ4550: 小奇的博弈(NIMK博弈& 组合数& DP)
4550: 小奇的博弈 Time Limit: 2 Sec Memory Limit: 256 MBSubmit: 159 Solved: 104[Submit][Status][Discuss] ...
随机推荐
- Python-文件和数据格式化
文件的使用 >文件的类型 文件的理解:文件是数据的抽象和集合 -文件时存储在辅助存储器上的数据序列 -文件是数据存储的一种形式 -文件展现形态:文本文件和二进制文件 文本文件vs.二进制文件 - ...
- NT9666X调试log
1.给GSensor_open();前加上打印函数DEBUG_P;打印如下信息: ######## FILE = e:/Project_code/Philips_PanGu/Philips_PanGu ...
- RequestMapping_请求参数&请求头
params和headers支持简单的表达式: --param1:表示请求必须包含名为param1的请求参数. --!param1:表示请求不能包含名为param1的请求参数. --param1 != ...
- noip模拟赛 铺瓷砖
[问题描述]有一面很长很长的墙. 你需要在这面墙上贴上两行瓷砖. 你的手头有两种不同尺寸的瓷砖, 你希望用这两种瓷砖各贴一行.瓷砖的长可以用分数表示,贴在第一行的每块瓷砖长度为A/B贴在第二行的每块瓷 ...
- CodeForces - 459C - Pashmak and Buses
先上题目+: C. Pashmak and Buses time limit per test 1 second memory limit per test 256 megabytes input s ...
- HTML表单数据转JSON
问题描述 后端使用如下方式接收前端传入参数: @PostMapping(value = "/test", produces = MediaType.APPLICATION_JSON ...
- spring-boot-starter-actuator(健康监控)配置和使用
在生产环境中,需要实时或定期监控服务的可用性.Spring Boot的actuator(健康监控)功能提供了很多监控所需的接口,可以对应用系统进行配置查看.相关功能统计等. 集成: <depen ...
- Java中原始数据类型存放位置理解
原始数据类型的变量存放在栈还是堆,应该由上下文去决定. 如下所示的局部方法中,定义了本地变量a,且为原始数据类型,所以存放在栈中. public void func(){ int a = 3; } 再 ...
- 22、Java并发性和多线程-Java中的读/写锁
以下内容转自http://ifeve.com/read-write-locks/: 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些.假设你的程序中涉及到对一些共享资源 ...
- 新手学測试----Unit Test(单元測试)
在程序猿做项目的过程中,每当完毕一个功能,首先自己须要对完毕的功能进行測试.我如今正在做的项目用的工具是VS2012.那么接下来,就说一说在VS2012中是怎样创建单元測试的. 怎样创建单元測试? 在 ...