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,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...
随机推荐
- 让Debian以root登录
Debian默认不允许root登录,所以修改之. (1)让Debian以root登录 修改gdm3的登录pam文件 #vi /etc/pam.d/gdm3 将auth required pam_suc ...
- python网络编程中互斥锁与进程之间的通信
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- [未解决]报错: crawlab启动失败
拉取镜像 docker pull tikazyq/crawlab:latest 一键启动 docker-compose up 报错提示:
- python自定义迭代器对象以及可迭代对象
# coding=utf8 from collections import Iterator from collections import Iterable #迭代器对象 class OwnIter ...
- flex布局解说和属性
1. flex-direction 规定当前DIV下面的子元素是横向布局还是纵向布局 row 默认值,横向布局相当于float:left column 纵向,相当于DIV默认的垂直方向 2.justi ...
- Django中content-type组件
django-content 1.需求 一家餐馆,有多个菜系,粤菜.湘菜.闽南菜.东北菜等,每个菜系中的菜品又分为小份.中份.大份,每个菜系对应的菜品量价格不同,现需要将该需求建表. 2. 建表方式 ...
- elasticsearch 基础 —— _mget取回多个文档及_bulk批量操作
取回多个文档 Elasticsearch 的速度已经很快了,但甚至能更快. 将多个请求合并成一个,避免单独处理每个请求花费的网络延时和开销. 如果你需要从 Elasticsearch 检索很多文档,那 ...
- 使用HystrixCommand封装http请求
1.引入依赖 要排除hystrix-core里的archaius-core,否则报错 <dependency> <groupId>com.netflix.hystrix< ...
- Redis和Ehcached的区别
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...
- Vue-选项卡切换
<html> <head> <title>Vue实现tab切换效果</title> <script src="vue.js"& ...