GOJ 1069
来源:互联网 发布:台湾ptt评淘宝用语 亲 编辑:程序博客网 时间:2024/06/05 02:57
这是一道简单博弈题。
1069题目
勇敢者的游戏(简单博弈)
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),而对于我们来说,参加这场“ War of Code”也是“勇敢者的游戏”。当然,除了“勇敢”,我们还希望看到“诚信”,无论考试成绩如何,希望看到的都是一个真实的结果,也相信大家一定能做到的~
各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:
1、 本游戏是一个二人游戏;
2、 有一堆石子一共有n个;
3、 两人轮流进行;
4、 每走一步可以取走1…m个石子;
5、 最先取光石子的一方为胜;
如果游戏的双方使用的都是最优策略,请输出哪个人能赢。
Input:
输入数据首先包含一个正整数C(C<=100),表示有C组测试数据。
每组测试数据占一行,包含两个整数n和m(1<=n,m<=1000),n和m的含义见题目描述。
Output:
如果先走的人能赢,请输出“first”,否则请输出“second”,每个实例的输出占一行。
Sample Input:
2
23 2
4 3
Sample Output:
first
second
本题思路:因为双方采取的都是最优策略,即游戏最开始的数量n,m已经决定了哪个玩家的输赢。有n个石子,一次可以取最多m个,最少1个,赢的玩家必须拿到最后的石头,那么玩家想赢,必须把每回合取的石头总数控制在某个数中,且这个数能被n整除。因为一次可以取最多m个,最少1个,所以每回合取的石头总数为m+1的话,当n%(m+1)==0时,后来的玩家赢;(因为不管前面玩家怎么取,只要后面的玩家每次取的石头数量为(m+1-x),那么后面的玩家一定可以取到最后的石头)如果n%(m+1)!=0,则为前面的玩家赢(嘻嘻,这就反过来想就可以了,只要前面玩家第一次把n的数量变为n可以被(m+1)整除就可以了)
AC代码:
#include<iostream>using namespace std;int main(){ int T; cin>>T; while(T--) { int n; int m; cin>>n>>m; if(n%(m+1)) cout<<"first"<<endl; else cout<<"second"<<endl; } return 0;}
版权声明:本文为博主原创文章,代码仅用于交流和学习!转载请注明出处!
- GOJ 1069
- GOJ 1052
- GOJ 1053
- GOJ 1096
- GOJ 1103
- 7GOJ 偶像 [线段树]
- 7GOJ 计划 [CDQ分治]
- GOJ 1454 计算24点
- 7GOJ 23 fleet [主席树]
- 7GOJ 25 collection [分块][莫队]
- goj 1446 判断栈的输出是否合法
- GOJ 1452(数论+前缀和查询)
- 7GOJ 学院 [连通性][并查集/DFS]
- 7GOJ 24 girls [可持久化Treap--区间操作]
- GOJ 1455 数学(规律模拟递推)
- 1069
- hdu 1069
- HDU 1069
- Ubuntu如何查找libz.so.1属于哪个包并安装
- ofbiz实战8——实验室预约管理系统功能介绍
- opencv中CV_8UC3有什么含义
- Docker 安装 Tomcat
- VB.net-VS2010导出datagridview数据到EXCEL,以时间为文件名
- GOJ 1069
- 黑马商城项目_banner动画效果
- python学习笔记(三)
- 2017ICPC/ACM亚洲赛区西安站现场赛 总结
- 02-(Object类-equals方法覆盖)1 2 03-(Object类-hashCode方法) 04-(Object类-getClass方法) 05-to String方法
- 7个优秀的国内外移动端web框架
- 智能小车44:最小系统其实很简单
- 本周六下午北京Linuxer聚会下午茶、交流欢迎报名参加
- 为什么用enum