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,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...
随机推荐
- Jexus 強勁、堅固、免費、易用的Linux ASP.NET服務器
Jexus 強勁.堅固.免費.易用的Linux ASP.NET服務器 Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色, ...
- EL表达式(二)运算符
运算符"."和"[]": "."能做的"[]"也能做,"[]"能做的"."不一定 ...
- 同步GitHub上fork的项目
最近在做“Python练习册,每天一个小程序”,fork了项目并贡献自己写的代码,项目还有其他人在贡献代码,每天都会更新,这就涉及到了自己fork的项目与原项目的同步更新问题,下面就是我最常用的方法. ...
- LayUI Table复杂表头实现
LayUI table官方文档中在介绍复杂表头时的用例仅使用了自动渲染的方式作为参考,而并未用到方法渲染的方式来做用例,这让部分不太熟悉layUI table的开发者会有些头疼,不知道如何在方法渲染中 ...
- UI自动化处理文件上传
UI自动化处理文件上传 import win32guiimport win32con def set_uploader(self, file_path): sleep(2) self.file_pat ...
- linux 查看 python 安装包路径
[root]# python -c "import fasttext;print(fasttext)"<module 'fasttext' from '/root/anaco ...
- eclipse 从git取项目,导入为maven项目,新加的方法,报加载主类错误
eclipse 从git取项目,导入为maven项目,新加的方法,报加载主类错误 具体描述: 整体编译能够编译成功,但新加一个java,里面创建一个main方法,运行时,报无法加载主类的错误, 整体编 ...
- python——datetime模块
一.datetime模块介绍 (一).datetime模块中包含如下类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时 ...
- Linux文件行排序
sort:对文件的行排序 - 准备一份文件:char.txt - sort char.txt:结果会按照头字母顺序排 - sort -o sortchar.txt char.txt:排序char.tx ...
- 模板引擎( art-template)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...