目录

一堆的 ,拿的石子某个范围内,在1~K之间

N堆的石子,每次只能从一堆中取

两堆,从一堆中取任意个或从2堆中取相同数量的石子,但不可不取

SG函数


一堆的 ,拿的石子某个范围内,在1~K之间


1066 Bash游戏  也加巴什博弈

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。

例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行2个数N,K。中间用空格分隔。(1 <= N,K <= 10^9)

Output

共T行,如果A获胜输出A,如果B获胜输出B。

Input示例

4
3 2
4 2
7 3
8 3

Output示例

B
A
A
B

贴上代码:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
#define ll long longint main()
{int n,k,t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);if(n%(k+1)==0)printf("B\n");elseprintf("A\n");}return 0;}

N堆的石子,每次只能从一堆中取

1069 Nim游戏  也叫尼姆博弈

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N及每堆石子的数量,问最后谁能赢得比赛。

例如:3堆石子,每堆1颗。A拿1颗,B拿1颗,此时还剩1堆,所以A可以拿到最后1颗石子。

Input

第1行:一个数N,表示有N堆石子。(1 <= N <= 1000)
第2 - N + 1行:N堆石子的数量。(1 <= A[i] <= 10^9)

Output

如果A获胜输出A,如果B获胜输出B。

Input示例

3
1
1
1

Output示例

A

贴上代码:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
#define ll long longint main()
{int n;while(scanf("%d",&n)==1){int ans=0;for(int i=0;i<n;i++){int x;scanf("%d",&x);ans^=x;}if(ans==0)printf("B\n");else printf("A\n");}return 0;}

两堆,从一堆中取任意个或从2堆中取相同数量的石子,但不可不取

1072 威佐夫游戏

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。

例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔。(1 <= N <= 2000000)

Output

共T行,如果A获胜输出A,如果B获胜输出B。

Input示例

3
3 5
3 4
1 9

Output示例

B
A
A

相关问题

Bash游戏

0

Bash游戏 V2

10

Bash游戏 V3

20

Nim游戏

0

Bash游戏 V4

40

威佐夫游戏

0

威佐夫游戏 V2

0


这种题之前学过,不过现在忘得差不多了
我们先来找找规律吧:

假定下面的判断如果为X表示A输,Y表示A赢

第一堆 第二堆 判断
       0       0      X
       0       1      Y
       1        1      Y
       1            2      X
       2       2      Y
       2        3      Y  
      3       3      Y
      3       4      Y
      3        5      X
     ...    ...      ...
      4        7       X
      ...      ...      ...
      6        10       X
      ...        ...      ...

我们讨论A输的时候两堆石子的情况,我们从数量小的开始:(0,0)---->(1,2)---->(3,5)---->(4,7)---->(6,10)---->·········

再看看两堆的差值:      0            1           2             3               4

我们发现,每个样例的第一个堆的数量都是前面没有出现的自然数,通过差值逐渐增加的规律得到两堆差值,进而得到另一堆的数量

这些样例也叫奇异局势,就是面对这种情况必输

然后我看了看以前学长讲的ppt,上面有个结论:

以上面的(6,10)为例,即A=6,B=10, 那么等式左边就等于6.472···,向下取整后就等于6,恰好等于A的值,也就是奇异局势

具体得来的其实我也不太清楚,估计还得问问数学家


贴上代码吧:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
#define ll long longint main()
{int n;int a,b;while(scanf("%d",&n)==1){for(int i=0;i<n;i++){scanf("%d%d",&a,&b);int A=a>b?b:a;int B=a>b?a:b;if((int)((sqrt(5.0)+1)/2*(B-A))==A)printf("B\n");elseprintf("A\n");}}return 0;}

最后再加上个SG函数

SG函数

其实下面讲的为甚sg那样求,然后判断Sg(x)^Sg(y)^Sg(z) == 0时就是奇异局势,我也不理解其中的缘由,先记着吧

•SG函数可以看成各个Nim游戏的和,将问题分成各种Nim问题,从而简化了问题。

•例如:有三堆石头,每次能取的数量为斐波拉系数,即只能取1,2,3,5,8,13,21……这些石头的数量。

首先

定义mex运算:表示最小的不属于这个集合的数。例如:mex{0,1,2,3} = 4、mex{0,1,3,4,5} = 2、mex{} = 0

对于任意的x,Sg(x) = mex{S},S为x的后继状态数值的集合,假设有三个状态Sg(a)、Sg(b)、Sg(c)。那么Sg(x) = mex{Sg(a),Sg(b),Sg(c)}。

设有三堆石头为x、y、z这三堆。那么只要判断Sg(x)^Sg(y)^Sg(z) == 0就行,当成立时就说明面对的是奇异局势,必输,反正必赢。

举例:

附上hdu 1848题目:

Fibonacci again and again

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11629    Accepted Submission(s): 5015

Problem Description

任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:
F(1)=1;
F(2)=2;
F(n)=F(n-1)+F(n-2)(n>=3);
所以,1,2,3,5,8,13……就是菲波那契数列。
在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题。
今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下:
1、  这是一个二人游戏;
2、  一共有3堆石子,数量分别是m, n, p个;
3、  两人轮流走;
4、  每走一步可以选择任意一堆石子,然后取走f个;
5、  f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);
6、  最先取光所有石子的人为胜者;

假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。

Input

输入数据包含多个测试用例,每个测试用例占一行,包含3个整数m,n,p(1<=m,n,p<=1000)。
m=n=p=0则表示输入结束。

Output

如果先手的人能赢,请输出“Fibo”,否则请输出“Nacci”,每个实例的输出占一行。

Sample Input

 

1 1 1 1 4 1 0 0 0

Sample Output

 

Fibo Nacci

Author

lcy

Source

ACM Short Term Exam_2007/12/13

Recommend

lcy


具体实现请看代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int sg[1001];
int fa[1001];
int mex[1010];
void getsg(int n)
{for(int i=1;i<=n;i++){memset(mex,0,sizeof(mex));for(int j=0;fa[j]<=i;j++){mex[sg[i-fa[j]]]=1;}for(int k=0;;k++){if(!mex[k]){sg[i]=k;break;}}}
}
int a[120];
int main()
{int t;int x,y,z;int flag;fa[0]=1;fa[1]=2;for(int i=2;i<=1000;i++)fa[i]=fa[i-1]+fa[i-2];getsg(1010);while(scanf("%d%d%d",&x,&y,&z)!=EOF&&(x||y||z)){if(sg[x]^sg[y]^sg[z]) printf("Fibo\n");else printf("Nacci\n");}return 0;
}

博弈论个人的一点小总结相关推荐

  1. php ci项目总结,分享关于php CI框架使用的一点小总结

    最近频繁使用CI框架,这里主要是关于后台的开发,重点分享关于Model和Controller层的一点点总结: 1.涉及到交互数据库,我们先在database.php总添加我们需要使用的数据库的连接信息 ...

  2. 作为面试官的一点小感想

    这两天公司要招大数据开发的人,让我去面试这些应聘者,几天下来面试的人也有10多个人了,这其中有应届生.刚工作不久的以及有一定年限的,学历有本科和研究生等.通过和这些人交谈后,心里也有一点小感触和小想法 ...

  3. C与C++在形参的一点小区别

    先看一下下面的代码: int fun(a,b) int a; int b; {return 10; }void main(int argc, char ** argv) {fun(10);return ...

  4. 函数的傅立叶展开掐死我吧_关于文章《傅里叶分析之掐死教程》的再一点小思考...

    封火星:关于文章<傅里叶分析之掐死教程>的一点小思考​zhuanlan.zhihu.com 以前的文章,从原理上更好的理解了原文中的一点,不过因为公式不是完全一样,从而有一个新问题不能解决 ...

  5. 对extern C的一点小认识

    对extern "C"的一点小认识 当我们想从C++中调用C的库时,(注,驱动是用C写的,连new.delete也不能用,郁闷)不能仅仅说明 一个外部函数,因为调用C函数的编译代码 ...

  6. 硬核,学习 Java 的一点小建议(思维导图,建议收藏)!

    CSDN 收到一条读者的私信,情真意切,所以我承诺他今天一定写篇文章好好回复他一下.先来看一下他的私信内容吧. 首先映入我的眼帘的是这个称呼--"老前辈",我一下子没忍住,笑了! ...

  7. 给计算机主机吹灰,电脑主机多久清理一次灰合理一些?一点小建议给你

    电脑主机多久清理一次灰合理一些?一点小建议给你 2020-02-20 15:14:21 7点赞 21收藏 24评论 前言: 电脑用着用着风扇狂转?显卡.CPU温度居高不下?服役多年的电脑主机变成了废旧 ...

  8. 关于软删除的一点小建议

    关于软删除的一点小建议 有些人以为软删除和硬删除一样,是直接将数据库里的某条数据删除,实则不然,软删除其实只是给数据表添加一个字段,用来标识某条数据是否是被用户"软删除"了的, 当 ...

  9. 考研英语十附双语阅读:按点下班惹非议?一点小花招让你看起来超努力(纯阅读,有些方法不普适)

    按点下班惹非议?一点小花招让你看起来超努力 总的来说,早退远比迟到难看得多,所以你不妨经常十一二点再上班,然后工作到晚上8点,这样每个人都会误以为你回到每天工作11小时的模式上了. 想给老板和同事留下 ...

  10. 对于感情的一点小感悟

    对于感情的一点小感悟 我谈不上是一个成人,因为我连女孩都没正常的追过. 所以我一直认为,我是个孩子. 嗯,顿时年轻了不少. 一切因为我喜欢上了一个女孩 爱和喜欢我觉得是不一样的. 喜欢是一次,爱是一辈 ...

最新文章

  1. Gson把对象转成json格式的字符串
  2. 图像的膨胀与腐蚀、细化
  3. 注销凭证与自定义屏幕
  4. Pytorch搭建Faster R-CNN目标检测平台
  5. Zookeeper_安全认证讲解
  6. Unity渲染管线-百人计划笔记
  7. Spring框架中的控制反转和依赖注入
  8. python通信原理_用python通过原始套接字发送scapy包
  9. 获取.jar文件运行时所处的路径
  10. 突破固化思维,如何快速做好陌生领域数据分析?
  11. Unity EditorWindow Rename
  12. node爬取app数据_从零开始写一个node爬虫(上)—— 数据采集篇
  13. java算法int型整数反转的另类解法
  14. 【Java项目】MVC教学评价系统
  15. 健康开怀一辈子(转)
  16. VS2005得include,library,src等路径自动设置
  17. 关于Linux 定时任务的注意事项
  18. mac远程桌面Microsoft Remote Desktop for Mac - Mac-连接Windows远程桌面
  19. 1028 人口普查 C++
  20. 判断用户离线在线隐身

热门文章

  1. 用户画像pdf_【金猿产品展】易观方舟:智能用户数据中台
  2. 以下选项中不是具体的python序列类型是_智慧树知到《大数据分析的python基础》章节测试答案...
  3. 数据结构:哈希表设计(c++)
  4. 数字信号处理实验(五)—— 心电信号处理 IIR FIR滤波综合题(上篇)
  5. linux中tar命令怎么用,linux tar命令使用详解
  6. 光伏并网pscad_100kW级组串式光伏逆变器的英飞凌模块方案介绍
  7. Redis key-value乱码问题
  8. Windows驱动开发WDM
  9. 锐捷交换机配置手册完整
  10. html提醒用户IE浏览器版本过低,引导更新或下载其他浏览器