poj 2505 A multiplication game 博弈基础

来源:互联网 发布:linux切换用户 编辑:程序博客网 时间:2024/05/30 04:32

点击打开链接

题意:从1开始轮流操作,操作mul from 2 to 9  >=n 时无法操作,则输 
一个state 后继有一个为必败态时,该state为必胜态
n<=2^32 递推TLE
明显n为必败 则[n/9,n)都为必胜态
 x=n/9  [x/2,x)  x/2~x都为必败态 因为[x/2,x)不管mul什么都会进入必胜态的区间(该区间的任意一个数的使用后继都为必胜态)


#include <iostream>#include <cstring>#include <cstdio>using namespace std;typedef long long ll;const ll inf=1e13;int main(){ll n;while(cin>>n){ll l=n,r=inf; bool flag=false;//必败态区间 while(l>1){//cout<<l<<" "<<r<<endl;if(flag==false){flag=true;//必胜态 r=l-1;l=(l+8)/9;// +8上取整 }else{flag=false;r=l-1;l=(l+1)/2;//ceil}}//stan 先手 if(flag)puts("Stan wins.");elseputs("Ollie wins.");}return 0;}



0 0
原创粉丝点击