码迷,mamicode.com
首页 > 其他好文 > 详细

POJ - 2348 Euclid's Game(博弈论入门题)

时间:2017-07-16 12:32:02      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:using   wap   大数   ==   blog   通过   turn   ble   swa   

题目链接:poj.org/problem?id=2348

题意:给出两个数,两个人进行博弈,每个人都采取最优策略。

每个人可以进行操作:两个数中较大数减去较小数的倍数(可以是1,2...X倍),使得其中一个数先为零的获胜。

 

每次都先把较小值给a,较大值给b。一开始把必胜态给先手的那个人,然后进行判断。

1.b-a<=a  没办法只能一次一次计算,必胜态不断变换,直到其中一个数刚好为0。

2.b-a>a   不管怎样都是必胜态。b - xa <= a如果这个是必败态,那么b - (x-1)a > a这个为必胜态。

举个例子:(4,17)———(4,1)必败

     (4,17)———(4,5)———(4,1)必胜

     (4,19)———(4,3)———(1,3)必胜

     (4,19)———(4,7)———(4,3)———(1,3)必败

简单说来就是b-a>a的时候可以通过判断尽量减是否能为必胜态,能的话就直接操作,不能的话再保留一个数,让对手去减,消耗,留下的就是必胜态了。

可以说能够立于不败之地。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int main(){
 6     int a,b;
 7     while(cin>>a>>b){
 8         if(a==0&&b==0) break;
 9         bool T=true;
10         while(1){
11             if(a>b) swap(a,b);
12             if(b%a==0) break;
13             if(b-a>a) break;
14             b-=a;
15             T=!T;
16         }
17         if(T) cout<<"Stan wins"<<endl;
18         else cout<<"Ollie wins"<<endl;
19     }
20     return 0;
21 }

 

POJ - 2348 Euclid's Game(博弈论入门题)

标签:using   wap   大数   ==   blog   通过   turn   ble   swa   

原文地址:http://www.cnblogs.com/Leonard-/p/7189912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!