POJ 2348 博弈
2013-01-07 12:24
211 查看
这个题看了一上午,一直没头绪,撞了东南西北墙,终于在中午看了解题报告。恍然大悟!
这个题的意思是这样的,只能从较大数中取较小数的倍数。到最后谁不能拿了,就视为失败。
我开始想找到一个数字的规律来解题,后来发现不行,接着又想尝试递归来模拟拿的步骤来写,又被自己否定了,终于看了解题报告。恍然大雾,明白了决策与影响控制对手的节奏。如果a/b>=2,则有两种选择来控制对手的行动,1种是将状态变为{a>b&&a/b=1}另一种是{a<b}。这样对手在两种情况下均只能有一种选择,而结果也只有两种,所以具有选择权的就会控制比赛结果。 也许大家在担心,是不是这下控制住了,下次就变了呢?大家不用担心这个,因为你给对手的选择永远只有一个,如果还有别的选择依然由自己来控制! 还有要找出来谁会优先掌握控制权。这题,对我有很大启发。感觉到了博弈的精髓,不给对手留机会。。。
这个题的意思是这样的,只能从较大数中取较小数的倍数。到最后谁不能拿了,就视为失败。
我开始想找到一个数字的规律来解题,后来发现不行,接着又想尝试递归来模拟拿的步骤来写,又被自己否定了,终于看了解题报告。恍然大雾,明白了决策与影响控制对手的节奏。如果a/b>=2,则有两种选择来控制对手的行动,1种是将状态变为{a>b&&a/b=1}另一种是{a<b}。这样对手在两种情况下均只能有一种选择,而结果也只有两种,所以具有选择权的就会控制比赛结果。 也许大家在担心,是不是这下控制住了,下次就变了呢?大家不用担心这个,因为你给对手的选择永远只有一个,如果还有别的选择依然由自己来控制! 还有要找出来谁会优先掌握控制权。这题,对我有很大启发。感觉到了博弈的精髓,不给对手留机会。。。
#include <stdio.h> int main() { int a,b,t,count; while(scanf("%d%d",&a,&b)&&(a!=0||b!=0)) { if(a<b) { t=a;a=b;b=t; } if(b==0) { printf("Ollie wins\n"); continue; } else if(a%b==0) { printf("Stan wins\n"); continue; } count=0; while(b!=0&&a/b==1) { count++; a=a-b; t=a;a=b;b=t; } if(count%2==0) { printf("Stan wins\n"); } else if(count%2==1) { printf("Ollie wins\n"); } } return 0; }
相关文章推荐
- POJ 2348 欧几德里博弈,博弈好题
- 博弈______Euclid's Game( poj 2348 )
- poj 2348(博弈)
- POJ 2348 Euclid's Game (博弈找规律 )
- poj 2348 Euclid's Game-----博弈
- poj 2348 Euclid's Game 博弈(推理)
- POJ 2348 Euclid's Game (博弈)
- 【POJ 2348 Euclid's Game】 + 博弈
- POJ 2348 —— 博弈
- 【POJ 2348】Euclid's Game 【简单博弈】
- POJ 2348 Euclid's Game【博弈】
- hdu 1525 || poj 2348 Euclid's Game(博弈找规律)
- 【POJ】2348 - Euclid's Game 博弈
- POJ 2348 Euclid's Game【博弈】
- 【POJ 2348 Euclid's Game】+ 博弈
- POJ 2348 Euclid's Game(简单博弈)
- POJ 2348 Euclid's Game (博弈)
- poj 2348 欧几里得博弈
- poj 2348 Euclid's Game(博弈)
- POJ 2348/HDU 1525-Euclid's Game辗转相除法(博弈)