设为首页 加入收藏

TOP

POJ 2348 Euclid's Game(博弈)
2015-07-20 17:40:56 来源: 作者: 【 】 浏览:1
Tags:POJ 2348 Euclid' Game 博弈

题目地址:POJ 2348

每一步只有如下三种情况:(假设a>=b)

1:a%b==0 这时候自然是必败态。

2:a<2*b 这时候的下一步是别无选择的,只能是变为(a-b,a),由于该步是唯一的,所以必胜态与必败态是交替的。

3:a>2*b 这时候是必胜态。为什么呢?因为此时总可以转移到一个必败态。由于第2情况的时候两种状态是交替的,而这时候由总可以转换成(a,a%b)和(a,a%b+b),而(a,a%b+b)与(a,a%b)又属于第2种情况的相邻的,所以必有一个是必败态。根据只要能达到必败态的就是必胜态,所以此时是必胜态。

这样这个题的做法就可以推出来了。只要找到第一个控制a>2*b或者a%b==0的人即可。

代码如下:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
           #include 
           
             #include 
            
              using namespace std; #define LL long long int main() { LL a, b, f; while(scanf("%lld%lld",&a,&b)!=EOF&&(a+b)) { f=0; while(1) { if(a
             
              2*b) break; a-=b; f=1-f; } if(!f) puts("Stan wins"); else puts("Ollie wins"); } return 0; } 
             
            
           
         
        
       
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 5012 Dice 下一篇HDU 5008西安网络赛B题:后缀数组..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)