HDU 1525 Eculid's Game(博弈)
2016-02-25 23:10
316 查看
题意:
代码:
给你两堆物品,每次可以在数量多的那一堆中那数量少的那堆数量的倍数, 先拿完一堆的赢。 博弈太机智,伤不起TAT。。。 假设两堆分别是a,b(a>b)。如果b==1|| a%b==0 则先手必胜。 当a>=2*b时,拿的时候有两种决策,一个是拿到a%b,b,或者 a%b+b,b,因为双方足够聪明,所以说,如果拿完所有的b赢的话, 就会把局面推到a%b+b,先手赢,繁殖依然,所以说这两种情况是先手 的那个人可以选择的,他只需要往赢得子局面上推就好了。 仔细想想应该就理解了。
代码:
// // Created by CQU_CST_WuErli // Copyright (c) 2016 CQU_CST_WuErli. All rights reserved. // #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <cctype> #include <cmath> #include <string> #include <vector> #include <list> #include <map> #include <queue> #include <stack> #include <set> #include <algorithm> #include <sstream> #define CLR(x) memset(x,0,sizeof(x)) #define OFF(x) memset(x,-1,sizeof(x)) #define MEM(x,a) memset((x),(a),sizeof(x)) #define BUG cout << "I am here" << endl #define lookln(x) cout << #x << "=" << x << endl #define SI(a) scanf("%d",&a) #define SII(a,b) scanf("%d%d",&a,&b) #define SIII(a,b,c) scanf("%d%d%d",&a,&b,&c) #define rep(flag,start,end) for(int flag=start;flag<=end;flag++) #define Rep(flag,start,end) for(int flag=start;flag>=end;flag--) #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 #define Root 1,n,1 #define BigInteger bign const int MAX_L=2005;// For BigInteger const int INF_INT=0x3f3f3f3f; const long long INF_LL=0x7fffffff; const int MOD=1e9+7; const double eps=1e-9; const double pi=acos(-1); typedef long long ll; using namespace std; const int N=2e4+100; int a,b; int dfs(int a,int b) { if (a>b) swap(a,b); if (a==0 || b%a==0 || b/a>=2) return 1; else if (!dfs(a,b-a)) return 1; return 0; } int main(int argc, char const *argv[]) { #ifdef LOCAL freopen("C:\\Users\\john\\Desktop\\in.txt","r",stdin); // freopen("C:\\Users\\john\\Desktop\\out.txt","w",stdout); #endif while(SII(a,b)==2 && (a||b)) { int ok=dfs(a,b); puts(ok?"Stan wins":"Ollie wins"); } return 0; }
相关文章推荐
- Android-Adapter实现方法(ArrayAdapter,SimpleAdapter,SimpleCursorAdapter)
- java并发编程——四(synchronized\Lock\volatile) 锁机制原理及关联
- Exoplayer学习
- Uva The Tower of Babylon
- 2016/2/25 html+css学习资源
- NSSet和NSMutableSet 确保数据的唯一性--备
- java多线程-Exchanger
- View Programming Guide for iOS 学习笔记_1
- UVA 557(p344)----Burger
- 利用php的explode函数将字符串按分隔符(比如空格)分拆并组装在数组中-----要考虑连续空格问题
- MD5 delPhi 加密
- CSS定位属性Position详解
- JS下实现加号减号的数量加一减一
- UVA 548(p155)----Tree
- 【软件工程】6.svn的使用
- 路由器的ip地址和主机默认网关的关系
- 在CentOS上MySQL数据库服务器配置方法
- [20160225] 太空工程师入门 / LOL 10级 / 股票走势预测
- APP引导页Demo
- 今天开始学习QT for sysbiam 1