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 题意:两个人轮流游戏,先手交换相邻两个数,后手先抛硬币,正面就左大右小换,反面就右大左小换,随机找到一对数 ...
随机推荐
- JavaScript 的数组操作--删除元素
在JavaScript中,可以很方便的删除指定位置的元素,这个是用到 splice方法, 该方法用于删除或替换数组中的部分数据. 其语法定义是 : splice(start , count [,new ...
- HDU1878 欧拉回路 - from lanshui_Yang
Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个 ...
- Linux下Nginx+tomcat应用系统性能优化
软件环境及服务器配置如下: Linux rh6.3,Tomcat7.0.29,Nginx1.2.7 mysql5.1,jdk1.6.0 mysql5.1 memcached 1.4.15 Xeno 2 ...
- ZOJ 3492 模拟循环链表线性查找
WA了好几次最后找到错因是因为数组开小了! = = string whose length never exceeds 20 所以至少要开到21 = = ,我却一直开20 ╮(╯▽╰)╭ AC代码: ...
- 海量数据存储之Key-Value存储简介
Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...
- Gora_百度百科
Gora_百度百科 Gora 编辑 目录 1什么是Apache Gora 2为什么要使用Apache Gora 3Gora的一个源代 ...
- Cocos2d-x CCTableView实现列表
在ios程序设计中,会大量使用到tableview视图(UITableView),那么在cocos2d-x中,如果需要类似的列表,该如何实现呢?在引擎中参照ios中的UITableView实现了一个叫 ...
- 使用struts2和poi导出excel文档
poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1 ...
- Spring整合Hibernate的步骤
为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSessionFactoryBean2.使用Spring管理Session对象 Hib ...
- Swift语言Storyboard教程:第一部分
更新记录: 该Storyboard教程由Caroline Begbie更新iOS 8和Swift相关内容.原文作者为教程编纂组的成员Matthijs Hollemans. 2014/12/10更新: ...