Ferguson游戏&&Ua12293——打表找规律
题意
有两个盒子分别有m颗糖果和n颗糖果,每次移动是将一个盒子清空而把另一个盒子里得一些糖果拿到被清空的盒子,使得两个盒子至少各有一个。无法移动者输。
分析
设初始状态为(m, n),显然(1, 1)是终态。
其实对于一个状态,只与两者之和有关。按k=m+n从小到大排序,就能递推的求出每个状态是必胜还是必败。
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn = + ;
bool win[maxn][maxn]; void solve()
{
win[][] = false;
for(int k = ;k < ;k++)
{
for(int n = ;n < k;n++)
{
int m = k - n;
win[n][m] = false;
for(int i = ;i < n;i++)
if(!win[i][n-i]) win[n][m] = true;
for(int i = ;i < m;i++)
if(!win[i][m-i]) win[n][m] = true;
//if(n <= m && win[n][m]) printf("%d %d\n", n, m);
}
}
} int main()
{
solve();
for(int i = ;i < ;i++)
for(int j = i;j <;j++)
if(win[i][j]) printf("%d %d\n", i, j);
}
发现规律:m,n都为奇数时先手必败;否则先手必胜。
Uva12293
题意:与Ferguson类似,不同的是,初始时两个盒子分别是(n, 1),每次选择数目较小的一个清空,并重新分配是的每个盒子中至少有一个。最先无法分配者输。
分析:
在上面的打表程序上稍做修改,
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn = + ;
bool win[maxn][maxn]; void solve()
{
win[][] = false;
for(int k = ;k <= ;k++)
{
for(int n = ;n <= k/;n++)
{
int m = k - n;
win[n][m] = win[m][n] = false;
for(int i = ;i < m;i++)
if(!win[i][m-i]) win[n][m] = win[m][n] = true;
}
}
} int main()
{
solve();
for(int i = ;i <;i++)
if(!win[i][]) printf("%d %d\n", , i);
}
必败态如下:
规律:(n+1)是2的整数次幂时是必败态,否则为必胜态。
判断(n+1)为2的整数次幂的方法:n&(n+1)=0.
参考链接:
1. https://blog.csdn.net/TSY_1222/article/details/83277648
2. https://blog.csdn.net/acdreamers/article/details/17020495
Ferguson游戏&&Ua12293——打表找规律的更多相关文章
- vijos 1004 伊甸园日历游戏 博弈+打表找规律
描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到19 ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- HDU 4861 Couple doubi (数论 or 打表找规律)
Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...
- HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- hdu_5894_hannnnah_j’s Biological Test(打表找规律)
题目链接:hdu_5894_hannnnah_j’s Biological Test 题意: 有n个不同的位置围成一个圈,现在要安排m个人坐,每个人至少的间隔为k,问有多少种安排 题解: 先打表找规律 ...
- hdu_5795_A Simple Nim(打表找规律的博弈)
题目链接:hdu_5795_A Simple Nim 题意: 有N堆石子,你可以取每堆的1-m个,也可以将这堆石子分成3堆,问你先手输还是赢 题解: 打表找规律可得: sg[0]=0 当x=8k+7时 ...
随机推荐
- 小程序接口无法传递session校验验证码
今天在写接口的时候发现一个问题,我用apiaaz测试一切正常,但是从小程序接口请求验证码,一直验证失败. 最开始用的图形验证码,查阅了不少资料,最后怀疑是cookie的问题,解决无果,换成了短信验证码 ...
- Akka-CQRS(12)- akka-http for http-web-service: Routing-服务项目接口
上篇提到,按当前对web-service功能需要,我们需要完成数据转换marshalling,服务接口routing这两部分的调研和示范.上篇已经完成了对序列化marshalling的讨论,这篇就介绍 ...
- 【SCALA】2、驼峰,下划线互转
1.刚开始写scala,发现确实还是很不熟悉,api以及语法的使用都不是很简洁,这写出来跟java也没差多少... 献丑了 package spark /** * @ProjectName: cutt ...
- [SOJ #686]抢救(2019-11-7考试)/[洛谷P3625][APIO2009]采油区域
题目大意 有一个\(n\times m\)的网格,\((x,y)\)权值为\(a_{x,y}\),要求从中选取三个不相交的\(k\times k\)的正方形使得它们权值最大.\(n,m,k\leqsl ...
- Oracle批量、大量Update方法总结
一.业务场景: (1)主从两个表,主表Student,有字段id.name.sex,从表Boy,有字段id.name,主从表同一对象id相同 (2)从表Boy的name属性被业务修改,定时批量处理主表 ...
- C#读写设置修改调整UVC摄像头画面-曝光
有时,我们需要在C#代码中对摄像头的曝光进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- Java自学-接口与继承 接口
设计Java的接口 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果. 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们 ...
- IntelliJ IDEA live template 方法配置
** * <p></p> * 功能描述 * $params$ * @return $return$ * @author abc * @date $time$ $date$ * ...
- 前端有用的CSS属性和JS方法
1.CSS属性: 透明属性(值越大越不透明): IE:filter:alpha(opacity:30) Google:opacity:0.3 层次属性(值大的会在上面): z-index:100 2. ...
- element-ui Upload 上传获取当前选择的视频时长
<el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...