HDU_2177 取(2堆)石子游戏

HDU 2177 取(2堆)石子游戏 Wythoff Game+输出方案 转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove HDU 2177 取(2堆)石子游戏 Wythoff Game+输出方案 http://acm.hdu.edu.cn/showproblem.php?pid=2177 由于要输出方案,便 得复杂了。数据不是很大,首先 阅读详情

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

Input
输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,且a<=b。a=b=0退出。

Output
输出也有若干行,如果最后你是败者,则为0,反之,输出1,并输出使你胜的你第1次取石子后剩下的两堆石子的数量x,y,x<=y。如果在任意的一堆中取走石子能胜同时在两堆中同时取走相同数量的石子也能胜,先输出取走相同数量的石子的情况.

Sample Input
1 2
5 8
4 7
2 2
0 0

Sample Output
0
1
4 7
3 5
0
1
0 0
1 2

分析:这道题是威佐夫博弈
可将两堆物品记做(a,b) 只考虑a<=b;
1.(0,0)P点
2.(0,*)N点(一步到1)
3.(1,1)N点
4.(1,2)P点(只能到2,3)
5.(1,*)N点(一步到4)
6.(2,*)N点
7.(3,3)N点(一步到1)
8.(3,4)N点(一步到4)
9.(3,5)P点(到不了P点)
10.(3,*)N点(一步到9)
11.(5,*)N点
.
.
.
所以,P点在 i=b-a(i=0,1,2,3…) 的位置
1.ai=[i*(1+√5)/2](方括表示下取整),2.bi=ai+i

如果开始时a,b就满足上述关系则先手败,否则先手胜。胜的时候还要输出第一次取子之后剩下的棋子x,y。只取一堆的情况
1.取a,则b不变,a满足 ai=[i*(1+√5)/2]&&a=b-i,即可
2.取b,则a不变,a<=b时 ai=[i*(1+√5)/2]&&a=b-i
b<a时 bi=[i*(1+√5)/2]&&b=a-i
取两堆的情况 b-a=i 不变
所以只要取成 a=[(b-a)*(1+√5)/2],即可制造必败点

#include<bits/stdc++.h>
using namespace std;
int main()
{ int a,b;
  while(~scanf("%d%d",&a,&b)&&!(a==0&&b==0))
 { if(a==floor((b-a)*(sqrt(5)+1)/2))
     cout<<"0"<<endl;
   else
   {  cout<<"1"<<endl;
       for(int i=a;i>=0;i--)
       { if(i==floor((b-a)*(sqrt(5)+1)/2))
        {cout<<i<<" ";
         cout<<i+b-a<<endl;
         break;
        }
       }
      for(int i=a;i>=0;i--)
      {   int t=b-i;
          if(i==floor(t*(sqrt(5)+1)/2))
          cout<<i<<" "<<b<<endl;
          break;
      }

       for(int i=b;i>a;i--)
      {   int t=i-a;
          if(a==floor(t*(sqrt(5)+1)/2))
          cout<<a<<" "<<i<<endl;
      }
          for(int i=a;i>=0;i--)
      {   int t=a-i;
          if(i==floor(t*(sqrt(5)+1)/2))
          cout<<i<<" "<<a<<endl;
      }

    }
 }
    return 0;
}
acm试题集锦 一些比较经典acm竞赛题目,希望对大家有所帮助 立即下载

相关推荐

IAR9.30以上版本安装、注册、新建工程和配置过程详细介绍

IAR 一般是指一款嵌入式软件的集成开发环境,类似于 MDK-Keil 这款软件。IAR 对于不同的内核处理器,是对应不同的 IAR 软件的,IAR 到目前为止支持大部分的MCU,比如8051系列、ARM架构系列、MSP430系列、AVR系列等等这些常用的芯片架构。对于 ARM 架构的芯片,有对应的 IAR Embedded Workbench for ARM 软件平台,因为我主要是使用 ARM 架构芯片,下面安装、注册和使用都是基于这个版本进行介绍的。

luobeihai的博客 6万+

2019-03-09

1、 本游戏是一个二人游戏; 2、 有一堆石子一共有n个; 3、 两人轮流进行; 4、 每走一步可以取走1…m个石子; 5、 最先取光石子的一方为胜; 如果游戏的双方使用的都是最优策略,请输出哪个人能赢。 #include &lt;bits/stdc++.h&gt; using namespace std; int main() { int t,n,m; cin&gt...

weixin_44420710的博客 574

Excel VBA--按某一列拆分数据到多个文件

首先,将需要拆分的sheet命名为“明细”,接下来运行此代码,按提示操作即可。 在这里插入代码片 Sub chaifen() '定义变量类型 Dim sht, sh1, sh2 As Worksheet Dim k, i, j As Integer Dim irow As Integer Dim col As Integer Dim str As String '程序开始是要求输入按哪一列拆分数...

weixin_43650026的博客 5873

BZOJ 3895 取石子 博弈论+记忆化搜索

题目大意:给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 直接想很难搞,我们不妨来考虑一个特殊情况 假设每堆石子的数量都>1 那么我们定义操作数b为当前石子总数+当前堆数-1 若b为奇数,则先手必胜,否则后手必胜 证明: 若当前只有一堆,则正确性显然 否则: 若b为奇数,那么先手只需进行一次合成操作,此时操作数会-1,且仍不存在大小为

世界 2807

强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3)

DDPG的critic会高估, 从而导致actor策略失败。TD3是增加了三个关键技巧优化DDPG。经过优化后的TD3(Twin Dalayed DDPG 双延迟深度确定性策略梯度算法)适合于具有高维连续动作空间的任务。

RL小站 2690

cosmos-curate工业级视频数据预处理引擎/终端用户指南( end-user-guide)

摘要:Cosmos-Curate是一个用于视频和自动驾驶数据处理的开源工具,提供从本地到集群的完整部署方案。文档针对三类用户:终端用户(配置运行现有管道)、开发者(修改/创建管道)和贡献者(改进代码库)。核心功能包括容器化设计(Docker+NVIDIA工具链)、多平台支持(本地/Slurm/云)、集成HuggingFace/NGC模型,以及可扩展的管道架构。使用需满足硬件(如Ampere架构GPU)和软件(Ubuntu22.04+Python3.10)要求,通过CLI工具构建镜像、下载模型并运行示例管道(

qq_45053161的博客 1202

HDU - 2177 取(2堆)石子游戏 威佐夫博弈

题目: 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子?  Input输入包含若干行,表示若干种石子的初始情

ACVevtor的博客 796

Python遥感图像处理指南(2)-卫星影像分析MNDWI提取

在第一篇文章中,我们使用了我们导入的软件包中已定义的函数,如 rasterio 中的 open 和 read 以及 matplotlib 中的 imshow。现在,我们可以编写自己的函数了。函数是一段代码,它接收一些参数作为输入并返回输出(经过一些计算),可以在代码中多次重复使用,也可以被其他代码重用。在 Python 中定义一个新函数非常简单。return v在此语法示例中,arg1和arg2强制参数,应该传递给函数,否则会引发错误,而arg3是一个可选参数,如果是,则假定默认值 1从函数调用中省略。

gis收藏家的博客 1576

ACM-威佐夫博弈之取(2堆)石子游戏——hdu2177

ACM 威佐夫博弈 取(2堆)石子游戏 hdu2177 hdu1527进阶

继续激情,继续奋斗。 4908

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 928

串口、COM、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1-WIRE

一文搞定,赶紧收藏吧

记得诚 3万+

hdu2177 取(2堆)石子游戏

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1000    Accepted Submission(s): 602 Problem Description 有两堆石子,数量任意,可以不同。游

我是小菜鸟啊。。。每天努力一点点。。。 444

BES2300x笔记(36) -- OTA升级

哈喽大家好,这是该系列博文的第三十六篇~ 篇~ <<【系列博文索引】快速通道 >> 一、前言 BES 蓝牙方案自带 OTA(Over The Air)功能,该功能可以对蓝牙固件进行在线升级,目前该功能支持通过安卓手机(苹果手机也有对应APP,未实际测试)对蓝牙固件进行升级,以后还会支持通过 PC 端进行在线升级。在使用 OTA 功能之前,用户需安装 BES 提供的手机 apk 软件,将需要升级的固件拷贝到手机,然后通过该 apk 软件进行在线升级。

文化人的博客 5356

HDU(航电)2177——取(2堆)石子游戏

原题链接 hdu—2177 取(2堆)石子游戏 题面 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子? Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,00

sugarsong的博客 1081

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【hdu 2177】取(2堆)石子游戏

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2403 Accepted Submission(s): 1441 Problem Description 有两堆石子,数量任意,可以不同。游戏开始由...

AWCXV 139

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU 2177 取(2堆)石子游戏

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1008    Accepted Submission(s): 606 Problem Description 有两堆石子,数量任意,可以不同。游

墨守空城与钟楼 1285

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hdu2177取(2堆)石子游戏

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

Magic_SpongeBob的专栏 1056

HDU 2177 取(2堆)石子游戏 (威佐夫博弈)

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2280    Accepted Submission(s): 1384 Problem Description 有两堆石子,数量任意,可以不同。

K键盘里的青春K 880

hdu 2177-取(2堆)石子游戏(威佐夫博弈)

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子? Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含...

Vace___yun的博客 605
上一篇: HDU_2149 Public Sale
下一篇: HDU_1527 取石子游戏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值