取石子游戏

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 3781    Accepted Submission(s): 1904

Problem Description
有两堆石子,数量随意,能够不同。

游戏開始由两个人轮流取石子。

游戏规定。每次有两种不同的取法,一是能够在随意的一堆中取走随意多的石子;二是能够在两堆中同一时候取走同样数量的石子。最后把石子所有取完者为胜者。如今给出初始的两堆石子的数目。如果轮到你先取,如果两方都採取最好的策略,问最后你是胜者还是败者。

 
Input
输入包括若干行。表示若干种石子的初始情况。当中每一行包括两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。
 
Output
输出相应也有若干行,每行包括一个数字1或0。假设最后你是胜者。则为1。反之,则为0。
 
Sample Input
2 1
8 4
4 7
 
Sample Output
0
1
0
解题思路:
看到这样的博弈题目。第一反应就是当中存在一定的内部规律:
这个游戏就是所谓的威佐夫博弈(Wythoff Game),果然够简单,够经典————“黄金切割! ! !”
观察这组数据:
************************************************
第一堆 第二堆(不区分两堆先后顺序) 差值
0 0 0
2 1 1
5 3 2
7 4 3
10 6 4
13 8 5
................................................
前几个必败点例如以下:(0,0),(1。2),(3,5),(4,7),(6。10)。(8,13)……
能够发现。对于第k个必败点(m(k),n(k))来说,
m(k)是前面没有出现过的最小自然数,
n(k)=m(k)+k
而:
m(k) = k * (1 + sqrt(5))/2
n(k) = m(k) + k
这两个公式不知道为什么是这样?好像是威佐夫博弈(Wythoff Game)的一部分
求大神解读... 

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const double q=(1+sqrt(5.0))/2.0;
int main()
{
int a,b,x,y;
while(~scanf("%d %d",&a,&b))
{
x=min(a,b);
y=a+b-x;
if(x==(int)((y-x)*q)
{
cout<<0<<endl;
}
else cout<<1<<endl;
}
return 0;
}

HDoj-1527-取石子游戏的更多相关文章

  1. hdu 1527 取石子游戏(Wythoff Game)

    题意:Wythoff Game 思路:Wythoff Game #include<iostream> #include<stdio.h> #include<math.h& ...

  2. HDU 1527 取石子游戏 (威佐夫博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1527 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是 ...

  3. HDU 1527 取石子游戏(威佐夫博弈)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  4. 题解报告:hdu 1527 取石子游戏(威佐夫博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1527 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石 ...

  5. HDU 1527 取石子游戏(威佐夫博弈)

    基础威佐夫博弈,判断奇异局势即可,判断方式为k为两数之差绝对值,(sqrt(5) + 1) / 2 * k若等于两数小者则为奇异局势,也就是必败态. #include<stdio.h> # ...

  6. 取石子游戏 HDU 1527 博弈论 威佐夫博弈

    取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...

  7. HDU-1527 取石子游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=1527 交换  :可实现. if( n < m ) { n^=m; m^=n; n^=m; } (三)尼姆博 ...

  8. Games:取石子游戏(POJ 1067)

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Descripti ...

  9. HDU 2516 取石子游戏(斐波那契博弈)

    取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  10. HDU 2516 取石子游戏(FIB博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. C++ STL中map存储方式——SAP电面(4)

    map存储方式  一般是平衡二叉树 红黑树

  2. gridview回顾

    第一看asp.net是在做项目之前,感觉收获也很大,第二次看gridview是在做完项目之后对GridView的回顾,这次的感觉是:我需要多想点,知识直到用时方觉少.直入正题吧,看gridview. ...

  3. hdu 2874Connections between cities LCA

    题目链接 给n个城市, m条边, q个询问, 每个询问, 输出城市a和b的最短距离, 如果不联通, 输出not connected. 用并查集判联通, 如果不连通, 那么两个联通块之间加一条权值很大的 ...

  4. GCD 之 同步 异步 并发

    1. dispatch_async(dispatch_get_global_queue(, ), ^{ // 处理耗时操作的代码块... //通知主线程刷新 dispatch_async(dispat ...

  5. 模拟美萍加密狗--Rockey2虚拟狗(三)

    几经挣扎,我最终还是选择了虚拟设备的方法来模拟Rockey2加密狗.HID.DLL劫持+API劫持的办法技术上虽然简单些,但太繁琐了,不仅要转发大量的函数,还要Hook好几个API,向我这么懒的人可干 ...

  6. LeapMotion 简介

    Leap Motion Overview Leap Motion是一种检测和跟踪hands, fingers and finger-like tools的设备.该设备在一个较近的环境中操作,精度高,跟 ...

  7. hdu 4119 Isabella's Message

    Isabella's Message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  8. JAVA 创建TXT文件,写入文件内容,读取文件内容

    [java]  view plain copy   package com.abin.facade.ws.mail.function; import java.io.BufferedReader; i ...

  9. software quality assurance 常见问题收录

    1. What is Quality? Quality means, “meeting requirements.” ..Whether or not the product or service d ...

  10. 怎样在SharePoint管理中心检查数据库架构版本号、修补级别和修补程序的常规监控

    怎样在SharePoint管理中心检查数据库架构版本号.修补级别和修补程序的常规监控 准备: 确保你是可以訪问管理中心的场管理员. 開始: 1. 打开管理中心--升级和迁移. 2. 点击"查 ...