ACdream群OJ 1131 Apple 博弈
来源:互联网 发布:tt域名cc域名 编辑:程序博客网 时间:2024/05/17 08:54
题目大意:整理为,现在有两个数字n和m,两人每轮可以使得n++或者m++(有且必须选其一),第一个让n^m>=A的人为输。问第一个人是必输、必赢或平局。
思路:先用的sg求,发现平局没法表示。最后直接用0表示必输点、1表示必赢点、2表示平局。
问题的关键在于终止条件的判断。显然当 n>=2 && m>=2时候 子状态是有限且很少的,可以暴力询问所有子状态。
当n==1时,m其实可以取无限大。但是,发现当 (n+1)^m>=A时候,子状态只有一个,而且,显然这种状态为平局。
当m==1时,n<=A,状态有限但是太多。但是当n^(m+1)>=A,子状态只有一个,可以直接通过A-n的奇偶性判断此点状态。
特别的,当一开始n^m>=A时候,是先手必败。
//#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<algorithm>#include<iostream>#include<ctime>#include<map>#include<set>using namespace std;#define MP(x,y) make_pair((x),(y))#define PB(x) push_back(x)typedef long long LL;//typedef unsigned __int64 ULL;/* ****************** */const int INF=100011122;const double INFF=1e100;const double eps=1e-8;const LL mod=20120427;const int NN=10;const int MM=1000010;/* ****************** */map<pair<int,int>,int>Mmap;int cnt;LL A;int sg[1000000];//0:lose//1:win//2:pingpair<int,int>temp;// n^m >= Abool fun(int n,int m){ if(n==1) { if(1>=A) return true; return false; } LL x=1; while(m--) { x=x*n; if(x>=A) return true; } return false;}int solve(int n,int m){ temp=MP(n,m); int id; if(Mmap.count(temp)==0) { id=++cnt; sg[id]=-1; Mmap[temp]=id; } else id=Mmap[temp]; if(sg[id]!=-1)return sg[id]; if(fun(n,m)) { sg[id]=1; return sg[id]; } if(n==1 && fun(n+1,m)) { sg[id]=2; return sg[id]; } if(m==1 && fun(n,m+1)) { sg[id]=1-( (A-n)%2 ); return sg[id]; } int x1=solve(n+1,m); int x2=solve(n,m+1); if(x1==0 || x2==0) sg[id]=1; else { if(x1==1 && x2==1) sg[id]=0; else sg[id]=2; } return sg[id];}int main(){ int x,z; int n,m; while(scanf("%d%d%d",&n,&m,&z)!=EOF) { Mmap.clear(); cnt=0; A=z; if(fun(n,m)) { puts("lose"); continue; } x=solve(n,m); // printf("cnt==%d\n",cnt); if(x==0) puts("lose"); else if(x==1) puts("win"); else puts("draw"); } return 0;}
0 0
- ACdream群OJ 1131 Apple 博弈
- ACdream群OJ--1035
- Land oj 1604 - Play Apple (博弈)
- ACdream群OJ 1122 数位DP
- ACdream群OJ 1126 Rankings 填坑法DP
- ACdream群OJ 1157 cdq分治
- acdream 1684(博弈)
- Apple。好题!ACdream群赛
- ACdream OJ 完美数
- ACdream群OJ-完美数-简单数位dp
- ACdream群OJ 1063 字典树的运用
- ACdream群赛 Apple (dfs+博弈论)
- AcDream OJ 1127 Base Station
- ACdream OJ 1154 Lowbit Sum
- ACdream OJ 1153 (k-GCD)
- ACdream OJ 1063 平衡树
- landoj--1604--Play Apple(博弈)
- WHU 1604 - Play Apple【博弈】
- 【php】读取"文件列表"按时间倒序显示,并递归显示各层目录、!
- 基本HTTP流程
- 动态创建布局及添加控件
- 发烧怎么办?按这5个穴位
- poj2643Election
- ACdream群OJ 1131 Apple 博弈
- 五种育儿观念需更新
- Effective C++ Item 37 绝不重新定义继承而来的缺省参数值
- openstack ice版文档horizon整理(页面resize)
- Java基础 - 泛型
- Android核心基础一
- LeetCode——Pascal's Triangle II
- 01背包问题算法解释与C代码实现
- openstack-ice版的eclipse环境配置