题目链接:https://ac.nowcoder.com/acm/contest/217/A
刚看这道题的时候还以为是博弈论==,然后稍微一想,发现就是个模拟。。。。水题模拟这个游戏过程即可。。
需要注意的是>=2*y0站在谁的角度,x的角度没错是那样;y的角度的话就是>=2*x0;因为题目说的是对手的y0,轮到你操作了你就是x,对手就是y不管初始怎么样
1 #include <iostream> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e6+5; 5 ll a[maxn]; 6 ll x0,y0,l; 7 ll x,y; 8 9 int main() 10 { 11 ios::sync_with_stdio(false); cin.tie(0); 12 13 cin>>x0>>y0>>l; 14 15 x=x0; y=y0; 16 int f1=0,f2=0,p=1; 17 for(;;) 18 { 19 if(p%2)//msc先手 20 { 21 if(x>l) 22 { 23 f1=1; 24 break; 25 } 26 for(;;) 27 { 28 y=y+x; 29 if(y>=y0*2) break; 30 } 31 32 p++; 33 } 34 else 35 { 36 if(y>l) 37 { 38 f2=1; 39 break; 40 } 41 for(;;) 42 { 43 x=x+y; 44 if(x>=x0*2) break; 45 } 46 p++; 47 } 48 } 49 if(f1) cout<<"Yes "; 50 else cout<<"No "; 51 52 x=x0; y=y0; 53 f1=0,f2=0,p=1; 54 for(;;) 55 { 56 if(p%2==0)//msc后手 57 { 58 if(x>l) 59 { 60 f1=1; 61 break; 62 } 63 for(;;) 64 { 65 y=y+x; 66 if(y>=y0*2) break; 67 } 68 69 p++; 70 } 71 else 72 { 73 if(y>l) 74 { 75 f2=1; 76 break; 77 } 78 for(;;) 79 { 80 x=x+y; 81 if(x>=x0*2) break; 82 } 83 p++; 84 } 85 } 86 if(f1) cout<<"Yes"<<endl; 87 else cout<<"No"<<endl; 88 89 90 return 0; 91 }
完。