Codeforces 39E What Has Dirichlet Got to Do with That? 游戏+内存搜索
主题链接:点击打开链接
意甲冠军:
特定 a一箱 b球 不变n (球和箱子都不尽相同,样的物品)
设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束
有2个人玩游戏。
若当前轮到 X时
1、 X选择添加一个箱子或添加一个球
2、若添加完后方法数>=n 则X失败
若先手必胜,则输出 Masha ,若先手必败则输出 Stas ,若为平局则输出 Missing
思路:
记忆化搜索
若当前给 a++ 或 b++都是会>=n 则当前局势必败
从当中不会>=n的局势中转移。
注意的是 若仅仅有一个箱子。且再添加一个箱子就会>=n 的情况,那么必定仅仅能添加b,那么一定无解
若仅仅有一个球,且再添加一个球就无解的情况,那么仅仅能添加a ,则依据 n - a 的奇偶性即能到当前局势
#include <cstdio>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
#define ll long long
ll n, a, b;
bool win(ll x, ll y){ // x个箱子y个球 这个点是必败态
ll tmp = 1;
for(ll i = 1; i <= y; i++) {
tmp*=x;
if(tmp>=n)return true;
}
return false;
}
map<pair<ll,ll> , ll> mp;
ll dfs(ll x, ll y){ //这个点的状态
if(mp.find(pair<ll,ll>(x,y)) != mp.end())
return mp[pair<ll,ll>(x,y)];
if(x==1 && win(2, y))
return mp[pair<ll,ll>(x,y)] = -1;
if(y==1 && win(x,2)){
if((n-x)&1)return mp[pair<ll,ll>(x,y)] = 0;
return mp[pair<ll,ll>(x,y)] = 1;
}
if(win(x,y))return mp[pair<ll,ll>(x,y)] = 1;
ll u = win(x+1,y), v = win(x,y+1);
if(u==1&&v==1)
return mp[pair<ll,ll>(x,y)] = 0;
if(u == 0)u = dfs(x+1, y);
if(v == 0)v = dfs(x, y+1);
if(u == 0 || v == 0)
return mp[pair<ll,ll>(x,y)] = 1; if(u==-1||v==-1)return mp[pair<ll,ll>(x,y)] = -1;
return mp[pair<ll,ll>(x,y)] = 0;
}
int main(){
ll a,b;
while(cin>>a>>b>>n){
mp.clear();
if(win(a+1,b) && win(a,b+1)){
puts("Stas");
continue;
}
if(b==1 && win(a,2)) {
if(!((n-a)&1))puts("Masha");
else puts("Stas");
continue;
}
ll tmp = dfs(a,b);
if(tmp<0)puts("Missing");
else
tmp ? puts("Masha"):puts("Stas");
}
return 0;
}
Codeforces 39E What Has Dirichlet Got to Do with That? 游戏+内存搜索的更多相关文章
- CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)
传送门 解题思路 首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判.首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜, ...
- CF 39E What Has Dirichlet Got to Do with That? (博弈)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出a ^ b,两个人轮流操作,可以 a ...
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp+搜索
题目链接: http://codeforces.com/problemset/problem/258/B B. Little Elephant and Elections time limit per ...
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present 记忆化搜索
D. Mysterious Present 题目连接: http://www.codeforces.com/contest/4/problem/D Description Peter decided ...
- codeforces gym #101161F-Dictionary Game(字典树+树上删边游戏)
题目链接: http://codeforces.com/gym/101161/attachments 题意: 给一个可以变化的字典树 在字典树上删边 如果某条边和根节点不连通那么这条边也删除 谁没得删 ...
- Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)
题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...
- Codeforces Round #324 (Div. 2) C (二分)
题目链接:http://codeforces.com/contest/734/problem/C 题意: 玩一个游戏,一开始升一级需要t秒时间,现在有a, b两种魔法,两种魔法分别有m1, m2种效果 ...
- LDA-math-认识Beta/Dirichlet分布
http://cos.name/2013/01/lda-math-beta-dirichlet/#more-6953 2. 认识Beta/Dirichlet分布2.1 魔鬼的游戏—认识Beta 分布 ...
- Codeforces 351B Jeff and Furik
http://codeforces.com/problemset/problem/351/B 题意:两个人轮流游戏,先手交换相邻两个数,后手先抛硬币,正面就左大右小换,反面就右大左小换,随机找到一对数 ...
随机推荐
- shell 脚本阅读之二——ltp工具下的runltp
#!/bin/sh ################################################################################ ## ## ## ...
- winform之2---messagebox用法
MessageBox.Show();可谓是winform开发中用的次数最多的东东啦.先贴一张msdn的图解 msdn好像没有更新哎,只提供了这几种方法,并且参数名称和最新的有差别,但实际上messag ...
- [转]-bash: wget: command not found的两种解决方法
wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装,这里是CentOS 6.5 64位系统 解 ...
- HDOJ1728 BFS【STL__queue_的应用】
STL__queue_的应用 调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue> ...
- 知识普及:iOS7搭载新定位技术iBeacon
摘自:http://iphone.91.com/tutorial/jcjc/131023/21619035.html 在2013年六月举行的WWDC上,作为iOS 7中最重要的新特性之一,苹果正式对外 ...
- the Meta-Object Compiler (moc)
the Meta-Object Compiler (moc) 元对象编译器是处理Qt的C++扩展的程序. moc工具读取C++头文件,如果它找到一个或者多个类声明包含Q_OBJECT宏.它生为那些类成 ...
- 香蕉派 BPI-M1+ 双核开源硬件单板计算机
香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...
- vi 快捷键积累
依据自己用到的.或者还没记住的.或者用的时候忘了的,慢慢积累. 一.全选复制粘贴. 全选: ggVG // 凝视: gg 光标移到首行 V 进入Visual(可视)模式 G 光标移到最后一行全选 选中 ...
- [置顶] Hibernate从入门到精通(七)多对一单向关联映射
上次的博文Hibernate从入门到精通(六)一对一双向关联映射中我们介绍了一下一对一双向关联映射,本次博文我们讲解一下多对一关联映射 多对一单向关联映射 多对一关联映射与一对一关联映射类似,只是在多 ...
- android 由于界面控件过多耗时处理办法
在开发当中,有时候可能界面嵌套较多,那么导致控件实例化增多,有时候会大大影响界面加载的速度,特别在viewpage中的时候,要是第一页里面要inflate一个控件比较多的页面的时候,就会影响整个Act ...