博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 1851 - A Simple Game
阅读量:5036 次
发布时间:2019-06-12

本文共 2290 字,大约阅读时间需要 7 分钟。

先上题目:

A Simple Game

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)

Total Submission(s): 1104    Accepted Submission(s): 686

Problem Description
Agrael likes play a simple game with his friend Animal during the classes. In this Game there are n piles of stones numbered from 1 to n, the 1st pile has M
1 stones, the 2nd pile has M
2 stones, ... and the n-th pile contain M
n stones. Agrael and Animal take turns to move and in each move each of the players can take at most L
1stones from the 1st pile or take at most L
2 stones from the 2nd pile or ... or take L
n stones from the n-th pile. The player who takes the last stone wins.
After Agrael and Animal have played the game for months, the teacher finally got angry and decided to punish them. But when he knows the rule of the game, he is so interested in this game that he asks Agrael to play the game with him and if Agrael wins, he won't be punished, can Agrael win the game if the teacher and Agrael both take the best move in their turn?
The teacher always moves first(-_-), and in each turn a player must takes at least 1 stones and they can't take stones from more than one piles.
 

 

Input
The first line contains the number of test cases. Each test cases begin with the number n (n ≤ 10), represent there are n piles. Then there are n lines follows, the i-th line contains two numbers M
i and L
i (20 ≥ M
i > 0, 20 ≥ L
i > 0). 
 

 

Output
Your program output one line per case, if Agrael can win the game print "Yes", else print "No". 
 

 

Sample Input
2
1
5 4
2
1 1
2 2
 
 
Sample Output
Yes
No
 
  题意:老师和学生玩游戏,游戏是这样的:n堆石头,每堆石头有mi个石子,每堆石头每次最多只能取li个石子,每次一定要取且只可以取某一堆的石子,老师先开始取,两个足够聪明,问学生能不能赢?
  问题相当于问后手能不能赢,对于这个游戏来说,只需要对每一堆石子都求一次巴什博奕,然后将结果异或,如果结果等于零就学生赢,否则就是老师赢。为什么这里只需要将所有堆的结果异或就可以得到结果呢?我认为这里的原因在于每一堆石子都是相对独立的,它们的变化互不影响,同时对于而对于总体来说它们又是一个大的Nim模型里面的石子,所以可以这样解决。其实过于这一点,我还不是很理解,所以说的可能不是很正确,如果读者有自己的想法的可以留言,大家探讨一下。
 
上代码:
 
1 #include 
2 using namespace std; 3 4 int main() 5 { 6 int t,n,x,y,ans; 7 ios::sync_with_stdio(false); 8 cin>>t; 9 while(t--){10 cin>>n;11 ans=0;12 for(int i=0;i
>x>>y;14 ans^=(x%(y+1));15 }16 if(ans) cout<<"No"<
/*1851*/

 

 

转载于:https://www.cnblogs.com/sineatos/p/3888841.html

你可能感兴趣的文章
mybatis中&gt;=和&lt;=的实现方式
查看>>
Python面向对象03/继承
查看>>
java序列化和反序列化
查看>>
绝对定位
查看>>
flink源码编译(windows环境)
查看>>
dpkg 删除 百度网盘 程序
查看>>
服务器nginx安装
查看>>
std::nothrow
查看>>
rest-framework 分页器
查看>>
JQuery(一)安装&选择器 样式篇
查看>>
浏览器的DNS缓存查看和清除
查看>>
浏览器跨域问题
查看>>
HTML5 input控件 placeholder属性
查看>>
使用JAVA如何对图片进行格式检查以及安全检查处理
查看>>
html5实现移动端下拉刷新(原理和代码)
查看>>
iPhone开发中从一个视图跳到另一个视图有三种方法:
查看>>
pytho logging
查看>>
一个Java程序员应该掌握的10项技能
查看>>
c#英文大小写快捷键
查看>>
tpframe免费开源框架又一重大更新
查看>>