CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)
解题思路
首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判。首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜,那么他一定会给\(a+1\),否则会给\(b+1\),如果到\(2^b>n\)时,说明谁动\(a\)谁输,就是平局了,这样的话可以模拟这个过程不断给\(b+1\)即可。第二种情况是\(b=1\),这种情况一定没有平局,那么就和刚才一样模拟即可。最后一种情况是\(a=1\)并且\(b=1\),这样的话把\(a=1,b=2\)和\(a=2,b=1\)的答案都算出来,然后讨论一下。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
const int N=40005;
typedef long long LL;
int n,a,b,ans;
bool f[N][35],vis[N][35];
inline LL fast_pow(LL x,int y){
LL ret=1;
for(;y;y>>=1){
if(y&1) ret=ret*x;
x=x*x;
}
return ret;
}
bool dfs(int x,int y){
if(vis[x][y]) return f[x][y];
vis[x][y]=1; int now;
if(fast_pow(1ll*x,y)>=n) return f[x][y]=1;
now=(dfs(x+1,y)^1)|(dfs(x,y+1)^1);
if(now) return f[x][y]=1;
return f[x][y]=0;
}
int one(int a,int b){
int ret=0,tmp=0;
while(fast_pow(2,b)<n){
if(!dfs(2,b)){
if(!tmp) ret=1;
else ret=2;
break;
}
tmp^=1; b++;
}
return ret;
}
int two(int a,int b){
int tmp=0,ret=0,pre=a;
while(fast_pow(a,2)<n){
if(!dfs(a,2)){
if(!tmp) ret=1;
else ret=2;
break;
}
tmp^=1; a++;
}
if(!ret) {
if((n-1-pre)&1) ret=1;
else ret=2;
}
return ret;
}
int main(){
scanf("%d%d%d",&a,&b,&n);
if(a==1 && b==1){
int now1=one(a,b+1); if(now1!=0) now1=3-now1;
int now2=two(a+1,b); now2=3-now2;
if(now1==1 || now2==1) puts("Masha");
else if(now1==2 && now2==2) puts("Stas");
else puts("Missing");
return 0;
}
else if(a==1){
ans=one(a,b);
if(ans==1) puts("Masha");
else if(ans==2) puts("Stas");
else puts("Missing");
return 0;
}
else if(b==1){
ans=two(a,b);
if(ans==1) puts("Masha");
else if(ans==2) puts("Stas");
return 0;
}
if(dfs(a,b)) puts("Masha");
else puts("Stas");
return 0;
}
CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)的更多相关文章
- CF 39E What Has Dirichlet Got to Do with That? (博弈)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出a ^ b,两个人轮流操作,可以 a ...
- Codeforces 39E What Has Dirichlet Got to Do with That? 游戏+内存搜索
主题链接:点击打开链接 意甲冠军: 特定 a一箱 b球 不变n (球和箱子都不尽相同,样的物品) 设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束 有2个人玩游戏. ...
- CF#345 (Div1)
论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...
- CF Round #510 (Div. 2)
前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...
- [UOJ Round#4 A] [#51] 元旦三侠的游戏 【容斥 + 递推】
题目链接:UOJ - 51 据说这题与 CF 39E 类似. 题目分析 一看题目描述,啊,博弈论,不会!等待爆零吧... 这时,XCJ神犇拯救了我,他说,这题可以直接搜啊. 注意!是用记忆化搜索,状态 ...
- ACM模板_axiomofchoice
目录 语法 c++ java 动态规划 多重背包 最长不下降子序列 计算几何 向量(结构体) 平面集合基本操作 二维凸包 旋转卡壳 最大空矩形 | 扫描法 平面最近点对 | 分治 最小圆覆盖 | 随机 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- codevs1910 递归函数
难度等级:黄金 codevs1910 递归函数 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= 0 or b <= 0 or c <= 0就返 ...
- 【学习笔记&训练记录】数位DP
数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...
随机推荐
- lib.tcl
#********************************************************************# 功能描述:定义公共的函数# 依赖关系:依赖于全局aitoo ...
- emacs配置&博客界面源代码
emacs配置 如果想要考场简单配置也可以去下面看,需要别的考场配置可以自己在下面比较全的里面找 考试备忘录(有新的就会更的...) By Junlier (global-set-key [f9] ' ...
- RDD缓存
RDD的缓存 Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存数据集.当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他 ...
- jq鼠标移入移除
ele.on({ mouseover : function(){ } , mouseout : function(){ } })
- python 子类继承父类__init__(转载)
转载: http://www.jb51.net/article/100195.htm 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法 ...
- 2019-1-5-Windows-的-Pen-协议
title author date CreateTime categories Windows 的 Pen 协议 lindexi 2019-01-05 11:14:49 +0800 2019-01-0 ...
- Django——Ajax相关
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数 ...
- Error- spark streaming 打包将全部依赖打进去Invalid signature file digest for Manifest main attributes
spark streaming 打包将全部依赖打进去,运行jar包报错:如下 Exception in thread "main" java.lang.SecurityExcept ...
- 【读书笔记】Cracking the Code Interview(第五版中文版)
导语 所有的编程练习都在牛客网OJ提交,链接: https://www.nowcoder.com/ta/cracking-the-coding-interview 第八章 面试考题 8.1 数组与字符 ...
- Nginx环境部署
下载Nginx wget nginx.tar.gz http://nginx.org/download/nginx-1.17.1.tar.gz 解压源码 tar -zxvf nginx-1.17.1. ...