博弈论专题——推理与动态规划相关博弈之POJ2348
来源:互联网 发布:普通disco视频软件 编辑:程序博客网 时间:2024/06/05 04:22
Euclid's Game
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8827 Accepted: 3605
Description
Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be nonnegative. Then Ollie, the second player, does the same with the two resulting numbers, then Stan, etc., alternately, until one player is able to subtract a multiple of the lesser number from the greater to reach 0, and thereby wins. For example, the players may start with (25,7):
an Stan wins.
25 7 11 7 4 7 4 3 1 3 1 0
an Stan wins.
Input
The input consists of a number of lines. Each line contains two positive integers giving the starting two numbers of the game. Stan always starts.
Output
For each line of input, output one line saying either Stan wins or Ollie wins assuming that both of them play perfectly. The last line of input contains two zeroes and should not be processed.
Sample Input
34 1215 240 0
Sample Output
Stan winsOllie wins
给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后为负数。先把一个数变为0的人获胜。
很显然,当大数是小数的整数倍时为必胜态。
从这道题学会一个叫做自由度的东西,感觉能够为博弈推理提供思路。
博弈基本就是一个推理必胜态和必败态的过程。自由度越低越好推理。
不妨假设b为两个数中的较大数。
如果b-a<a
那么只能选择用b去减a,如果后继态是必胜态,那么该状态是必败态,否则就是必胜态。
如果b-a>a呢?
我们怎么能够转移到自由度较低的情况。
假设x是是的b-x*a<a的整数。
那么我们用b减去(x-1)*a。这个就变成了第一种情况,如果第一种情况是必败态,那么此时就是必胜态。
如果减去(x-1)*a是必胜态呢?那么b-a*x是不是就变成了必败态?(有点绕,仔细想想),所以当前状态还是必胜态。
所以就是比谁先达到自由度高的情况即可。
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>using namespace std;int a,b;void solve(){ bool f=true; for(;;){ if(a>b) swap(a,b); if(b%a==0) break; if(b-a>a) break; b-=a; f=!f; } if(f) puts("Stan wins"); else puts("Ollie wins");}int main(){ while(scanf("%d%d",&a,&b)){ if(a==0&&b==0) break; solve(); }}
0 0
- 博弈论专题——推理与动态规划相关博弈之POJ2348
- 博弈论专题——推理与动态规划相关博弈之POJ2068 POJ3688动态规划)
- 博弈论专题——推理与动态规划相关博弈之POJ2484 POJ1740(模仿游戏)
- poj2348(博弈推理)Euclid's Game
- POJ2348(博弈论)
- 博弈与动态规划
- POJ2348+博弈
- 博弈 poj2348
- poj2348(博弈)
- 博弈论——威佐夫博弈
- 动态规划专题之滑雪
- 动态规划 之 序列专题
- 动态规划专题之zoj1013
- 博弈论之Nim 博弈
- 博弈论之阶梯博弈
- 线性动态规划——专题
- ACM第三专题—动态规划总结
- NOIP专题复习——专题二:动态规划基础
- HDU - 5256 序列变换 【LIS变形】
- S重构重命名的快捷键
- http://www.cnblogs.com/chenlulouis/archive/2010/07/07/1772631.html
- jdbc oracle数据库访问
- 位段和联合
- 博弈论专题——推理与动态规划相关博弈之POJ2348
- 大话设计模式学习笔记---依赖倒转原则
- HDU 2112 HDU Today
- 10.shell编程(10) --- 函数(2)
- iOS 教你写通用的description方法
- Spring bean 之 FactoryBean
- 面向对象设计原则:
- C#开发命名规范
- 基于haproxy 实现spark hiveserver2 ha