symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

  这个题看了一上午,一直没头绪,撞了东南西北墙,终于在中午看了解题报告。恍然大悟!

  这个题的意思是这样的,只能从较大数中取较小数的倍数。到最后谁不能拿了,就视为失败。

  我开始想找到一个数字的规律来解题,后来发现不行,接着又想尝试递归来模拟拿的步骤来写,又被自己否定了,终于看了解题报告。恍然大雾,明白了决策与影响控制对手的节奏。如果a/b>=2,则有两种选择来控制对手的行动,1种是将状态变为{a>b&&a/b=1}另一种是{a<b}。这样对手在两种情况下均只能有一种选择,而结果也只有两种,所以具有选择权的就会控制比赛结果。 也许大家在担心,是不是这下控制住了,下次就变了呢?大家不用担心这个,因为你给对手的选择永远只有一个,如果还有别的选择依然由自己来控制!     还有要找出来谁会优先掌握控制权。这题,对我有很大启发。感觉到了博弈的精髓,不给对手留机会。。。

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a,b,t,count;
 5     while(scanf("%d%d",&a,&b)&&(a!=0||b!=0))
 6     {
 7         if(a<b)
 8         {
 9             t=a;a=b;b=t;
10         }
11         if(b==0)
12         {
13             printf("Ollie wins\n");
14             continue;
15         }
16         else if(a%b==0)
17         {
18             printf("Stan wins\n");
19             continue;
20         }
21         count=0;
22         while(b!=0&&a/b==1)
23         {
24             count++;
25             a=a-b;
26             t=a;a=b;b=t;
27         }
28         if(count%2==0)
29         {
30             printf("Stan wins\n");
31         }
32         else if(count%2==1)
33         {
34             printf("Ollie wins\n");
35         }
36     }
37     return 0;
38 }

 

posted on 2013-01-07 12:24  symons  阅读(240)  评论(0)    收藏  举报