【P2252】取石子游戏 - 洛谷

题目背景

题目描述

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

输入输出格式

输入格式:

输入共一行。

第一行共两个数a, b,表示石子的初始情况。

输出格式:

输出共一行。

第一行为一个数字1、0或-1,如果最后你是胜利者则为1;若失败则为0;若结果无法确定则为-1。

输入输出样例

输入样例#1:
复制

8 4
输出样例#1: 复制

1

说明

[数据范围]

50%的数据,a, b <= 1000

100%的数据,a, b <= 1 000 000 000


题解

裸的威佐夫博弈。

威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。       ——百度百科

在威佐夫博弈中,有这样一种性质:

若当前为一个奇异局势,则先手必败;否则先手必胜。

其中奇异局势,是这样的一系列数对——

$(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20)......$

观察可得,若设第$k$组奇异局势为$(a[k],b[k])$的话,那么有:

$1.   b[k]==a[k]+k$

$2.   a[k]$为这之前未出现过的数中最小的一个。

奇异局势有如下性质:

$1.$任何自然数都包含在一个且仅有一个奇异局势中。

由于$a[k]$是未在前面出现过的最小自然数,所以有$a[k] > a[k-1] $,而 $b[k]= a[k] + k > a[k-1] + k > a[k-1] + k - 1 = b[k-1] > a[k-1]$ 。所以性质$1$成立。

$2.$任意操作都可将奇异局势变为非奇异局势。

事实上,若只改变奇异局势$(a[k],b[k])$的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。如果使$(a[k],b[k])$的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。

$3.$采用适当的方法,可以将非奇异局势变为奇异局势。          ——百度百科

要么保持$x$不变,把$y$减到$x$对应的$a[k]$;

要么保持$x$不变,把$y$减到$x$对应的$b[k]$;

要么把$x$和$y$一起减到$a[y-x],b[y-x]$,

总有一种适合你。

根据奇异局势的定义(面对时先手必败),可证若给定局势为奇异局势,先手必败;

而根据性质$3$,可知若给定局势不是奇异局势,先手可以用一步操作把其变为奇异局势。所以若给定局势不是奇异局势,则先手必胜。

——————

但是递推去求每一个奇异局势的话还是复杂度太高了QAQ

根据一系列推演,可以得到$a[k]$和$b[k]$是一个叫Beatty序列的东西。

证明我也看不懂呐,就当结论记吧QAQ

$a[k]=k*\frac{\sqrt{5}+1}{2},b[k]=a[k]+k$

而且这是一个计算机也能用的公式!(不像Fibonacci通项公式一样因为精度问题不能用QAQ

所以此题解决√

 /*
qwerta
P2252 取石子游戏
Accepted
100
代码 C++,0.27KB
提交时间 2018-10-01 20:15:45
耗时/内存
28ms, 812KB
*/
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define LL long long
int main()
{
LL a,b;
cin>>a>>b;
if(a>b)swap(a,b);
LL x=((double)(b-a)*(sqrt(5.0)+1.0)*0.5);
if(x==a)cout<<;
else cout<<;
return ;
}

「LuoguP2252」 取石子游戏(威佐夫博弈的更多相关文章

  1. nim3取石子游戏 (威佐夫博弈)

    http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有 ...

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

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

  3. 洛谷P2252 取石子游戏(威佐夫博弈)

    题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  4. hdu1527取石子游戏(威佐夫博弈)

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

  5. P2252 取石子游戏 威佐夫博弈

    $ \color{#0066ff}{ 题目描述 }$ 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆 ...

  6. POJ 1067 取石子游戏 威佐夫博弈

    威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k= ...

  7. POJ1067 取石子游戏 威佐夫博弈 博弈论

    http://poj.org/problem?id=1067 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可 ...

  8. HDU2177:取(2堆)石子游戏(威佐夫博弈)

    Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...

  9. poj 1067 取石子游戏( 威佐夫博奕)

    题目:http://poj.org/problem?id=1067 题意:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的 ...

随机推荐

  1. JavaScript的string方法(demo)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Jenkins Robot framework 持续集成环境搭建

    为什么我们要引入RF?其实最初我们引入RF是为了能够快速的开展自动化验收测试,为敏捷保驾护航.这其中有个重要的工具Jenkins,同时也是应群里朋友们的要求,这次就来介绍一下RF如何快速便捷的结合Je ...

  3. ActiveMQ测试工具

    1. 测试工具 目前使用两种测试工具进行压力测试 1. Jmeter 测试单客户端收发多主题,测试高并发,大数据量时的接收效率 2. emqtt_benchmark测试多客户端收发主题,测试高吞吐量下 ...

  4. Laravel 5.4建站06--API 认证系统 Passport

    介绍 在 Laravel 中,实现基于传统表单的登陆和授权已经非常简单,但是如何满足 API 场景下的授权需求呢?在 API 场景里通常通过令牌来实现用户授权,而非维护请求之间的 Session 状态 ...

  5. 关于CSS和CSS3的布局小知识(干货)

    最近在网站偶然看到的这个网站,进去看了下讲的CSS布局,感觉还不错,讲易懂且实用推荐给大家. http://zh.learnlayout.com/

  6. VB.NET版机房收费系统—数据库设计

    之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...

  7. 升级到Scriptcase 8.0的注意事项

    Scriptcase的最新版本号v8.0已经正式公布了,因为国外下载较慢,我们在百度云盘创建了下载地址: http://pan.baidu.com/s/1qWwh6bi (Windows可运行文件)大 ...

  8. SQL还有多少"理所当然";还有那些"就是这样"

    前言废话——sql是程序员的饭碗,繁琐but万能,但能干并不意味着适合干,每当多表关联寻找外键时,我都在经历一种没有选择的痛苦.sql不完美,但长期代码让人无暇顾及完美,再痛苦的呐喊到最后都归于疲倦已 ...

  9. [Phoenix] 五、二级索引

    摘要: 目前HBASE只有基于字典序的主键索引,对于非主键过滤条件的查询都会变成扫全表操作,为了解决这个问题Phoenix引入了二级索引功能.然而此二级索引又有别于传统关系型数据库的二级索引,本文将详 ...

  10. gitlab 外网 无法访问 查端口 看文档

    云服务器安装成功后 curl   页面可以正常跳转 重置密码的token  页面可以生成 但是  外网无法 访问 [root@test ~]# curl 127.0.0.1:18021 <htm ...