题目链接

一直觉得巴什博奕是最简单的博弈遇到肯定没问题,结果被虐惨了,看完标程错了10多遍都没反应过来,当然标程题解和代码的意思也写反了,但是还是想对自己说一句mdzz,傻啊!!!这道题很不错,我觉得很有必要拿来写一篇博客。

题意:n个石子,两个人轮流取,q次询问,每次询问给定k和l,取的石子数目在k到l之间,假设两个人的取法都为最佳即向着自己赢的目标取,问一共能取多少次。

题解:巴什博奕,接下来的叙述中用a和b代替k和l。根据巴什博奕,首先ans=n%(a+b)*2是肯定的,问题就在于余数p。之前我一直以为余数p大于0就ans++,不是这样的,p>=m才ans++,注意不是p>m。四个分割点把余数分成了三种情况,[0,a),[a,b),[b,a+b)。第一种不用说,先手取什么后手就取a+b-先手取的,最后剩下一点点谁也取不了后手赢,答案不变。第二种就要ans++了,因为先手可以直接取走那些然后先后手转换,这个用巴什博奕的思想就很容易解释。第三种要注意,先手直接拿走b个,那么现在剩的余数q一定是跑到第一个区间里去了,这就变成了第一种情况,先后手已经转换,ans++。

结论:1. n%(a+b) < a时 ans = 2 * (n/(a+b));

     2. n%(a+b) >= a时 ans = 2 * (n/(a+b)) + 1;

个人习惯这样写感觉比较稳,代码可以简化,cin不会超时,数据不会超int,直接套公式即可。

#include <cstdio>
#include <cstring>
using namespace std;
int data[],cnt;
int main()
{
int n,m,q;
while(scanf("%d%d",&n,&q)!=EOF)
{
memset(data,,sizeof(data));
cnt=;
int k,l;
while(q--)
{
m=n;
scanf("%d%d",&k,&l);
int a=k+l;
int ans=m/a*;
m%=a;
if(m>=k) ans++;
data[cnt++]=ans;
}
for(int i=;i<cnt-;i++)
printf("%d ",data[i]);
printf("%d\n",data[cnt-]);
}
return ;
}

codeforces gym 100694 M The Fifth Season (巴什博奕)的更多相关文章

  1. HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者(巴什博奕)

    选拔志愿者 题意: 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理学专家.根据要求,我 ...

  2. HDU 1851 (巴什博奕 SG定理) A Simple Game

    这是由n个巴什博奕的游戏合成的组合游戏. 对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1). 然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异 ...

  3. HDU 2149-Public Sale(巴什博奕)

    Public Sale Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  4. (step8.2.4)hdu 1846(Brave Game——巴什博奕)

    题目大意:输入一个整数t,表示测试用例是.接着输入2个整数n,m.分别表示这堆石头中石头的个数,和每次所能取得最大的石头数.判断那一方为赢家 解题思路: 1)这是一道简单的巴什博弈: 所谓巴什博弈,是 ...

  5. HDU 2897 邂逅明下(巴什博奕变形)

    巴什博奕的变形,与以往巴什博奕不同的是,这里给出了上界和下界,原先是(1,m),现在是(p,q),但是原理还是一样的,解释如下: 假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次 ...

  6. HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(基础巴什博奕)

    最最最基础巴什博奕 #include<stdio.h> #include<iostream> #include<cstring> #include<cmath ...

  7. HDU 2149 巴什博奕

    点这里去做题 基础的巴什博奕,注意m<n的情况 #include<bits/stdc++.h> int main() { int n,m,r,i; while(scanf(" ...

  8. HDU 1846 巴什博奕

    点这里去做题 最简单的巴什博奕 ,凑m+1 #include<bits/stdc++.h> int main() { int T,n,r,m; scanf("%d",& ...

  9. HDU 4764 Stone(巴什博奕)

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

随机推荐

  1. mac安装mongodb

    一,安装方法1 ,下载mongodb 1,官网下载mongodb程序 https://www.mongodb.org/downloads#production​ 2,解压后启动mongodb服务 下载 ...

  2. 解析某些特殊格式XML文件时,获取不到根节点问题

    还是在语音识别这块.在读取本地的SRGS的XML后,无法获取到根节点<grammar>. 下面是SRGS.XML文件(只给出了根节点) <?xml version="1.0 ...

  3. MySQL也有潜规则 – Select 语句不加 Order By 如何排序?

    今天遇到一个问题,有一个 Select 语句没有加 "Order By",返回的数据是不确定的. 这种问题碰到不止几次了.追根寻底, Select 语句如果不加 "Ord ...

  4. Javascript高级程序设计——面向对象小结

    ECMAScript支持面向对象编程,对象可以在代码执行时创建,具有动态扩展性而非严格意义上的实体. 创建对象方法: 工厂模式:简单的函数创建引用类型 构造函数模式:可以创建自定义引用类型,可以想创建 ...

  5. ASP.NET、C#调用外部可执行exe文件--多种方案

    一. try { //方法一 //调用自己的exe传递参数 //Process proc = new Process(); //proc.StartInfo.FileName = @"D:\ ...

  6. asp.net的sql防注入和去除html标记的方法

    一. // <summary> /// 过滤标记 /// </summary> /// <param name="NoHTML">包括HTML, ...

  7. OpenCv皮肤检测-HSV分离

    HSV皮肤检测 // 进行肤色检测 void SkinDetect(IplImage* src, IplImage* dst) { // 创建图像头 IplImage* hsv = cvCreateI ...

  8. (原)android中的动画(二)

    帧动画的使用需要在xml文件中指定每一帧所对应的图片 animation-list写法如下: <?xml version="1.0" encoding="utf-8 ...

  9. 无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用

    java.lang.Error: 无法解析的编译问题: 无法解析类型 javax.servlet.http.HttpServletRequest.从必需的 .class 文件间接引用了它 无法解析类型 ...

  10. CodeIgniter框架下载辅助函数的一个小bug

    if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE) { header('Content-Type: '.$mime ...