题目链接

HDU-1848 Fibonacci again and again

题目大意

有 3 3堆石子,分别有m,n,pm,n,p个,两人轮流进行取石子,每次可以从一堆石子取走任意正整数个石子,最先取光石子的一方为胜,判断先手是否必胜?

Sample Input

1 1 1
1 4 1
0 0 0

Sample Output

Fibo
Nacci

思路

这篇博文通过实例很清楚的介绍了基础的 SG函数 SG函数求法(可能是没看到别的吧。。。),感觉已经明白了 SG函数 SG函数的定义和计算方法。

设运算 mex(minimalexcludant) mex (minimal excludant)是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。
若状态 S S能到达状态a,b,ca,b,c,则 mex(S)=mex{SG[a],SG[b],SG[c]} mex(S)=mex\{SG[a],SG[b],SG[c]\}。

SG函数 SG函数性质:
①对于任意的局面,如果它的 SG SG值为 0 0,那么它的任何一个后继局面的SGSG值不为 0 0。
②对于任意的局面,如果它的SGSG值不为 0 0,那么它一定有一个后继局面的SGSG值为 0 0 。

SG定理SG定理:
在我们每次只能进行一步操作的情况下,对于任何的游戏的和,我们若将其中的任一单一 SG−组合游戏 SG-组合游戏换成数目为它的 SG SG值的一堆石子,该单一 SG−组合游戏 SG-组合游戏的规则变成取石子游戏的规则(可以任意取,甚至取完),则游戏的和的胜负情况不变。

实际运用起来就是将组合游戏看成尼姆博弈,将所有的 SG SG值异或起来判断组合游戏的胜负。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;int n,m,p,ans;
int f[55],cnt,sg[1005];
bool vis[1005];void init() {f[1]=f[2]=1;cnt=2;while(f[cnt]<1000) {f[cnt+1]=f[cnt]+f[cnt-1];++cnt;}
}void getSG(int mx) {sg[0]=0;for(int i=1;i<=mx;++i) {memset(vis,false,sizeof(vis));for(int j=1;f[j]<=i;++j) {vis[sg[i-f[j]]]=1;}for(int j=0;j<=i;++j) {if(!vis[j]) {sg[i]=j;break;}}}
}int main() {init();getSG(1000);while(scanf("%d%d%d",&m,&n,&p),m!=0||n!=0||p!=0) {printf("%s\n",(sg[m]^sg[n]^sg[p])==0?"Nacci":"Fibo");}return 0;
}

HDU-1848 Fibonacci again and again(组合游戏)相关推荐

  1. (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)

    题目大意:输入3个整数m,n,p,分别表示3堆石头中的石头个数 解题思路: 1)斐波那契数列的第16个数fib[16] == 1597 2)(sg[m]^sg[n]^sg[p])   .一定要加括号, ...

  2. 题解——HDU 1848 Fibonacci again and again

    一道组合游戏的题目 SG函数的板子题 预处理出SG函数的值然后回答询问即可 代码 #include <cstdio> #include <algorithm> #include ...

  3. HDU 1848 Fibonacci again and again(博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:游戏规则如下: 1.  这是一个二人游戏; 2.  一共有3堆石子,数量分别是m, n, ...

  4. HDU 1848 Fibonacci again and again

    #include<stdio.h> #include<string.h> #include<stdlib.h>const int MAXN = 1005; int ...

  5. 博弈论——公平组合游戏与SG函数

    参考自算法竞赛进阶指南 公平组合游戏与有向无环图 一个博弈游戏被称为公平组合游戏(ICG)当且仅当其同时满足3个条件 由两名玩家交替行动 游戏任意时刻可进行的操作与轮到哪名玩家无关 不能进行操作的玩家 ...

  6. 博弈论题目总结(二)——SG组合游戏及变形

    SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状 ...

  7. Fibonacci again and again HDU - 1848(尼姆博弈+SG函数的运用+SG函数详解)

    题意: 给出三堆石子(m,n,p个),两人每次只能取斐波那契数f[i]个,最先取光所有石子者取胜 题目: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义 ...

  8. SG函数入门HDU 1848

    SG函数 sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3. ...

  9. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

最新文章

  1. POJ - 3070 Fibonacci
  2. 卷积Strassen算法
  3. Web Services 详解
  4. c语言 srand time 0,c++ 随机数 srand(time(0)) 用法 | 求索阁
  5. 数据分析结果解读_聚类分析的实际运用及案例解读(二)
  6. IOS高级开发之多线程(五)NSOperation 2
  7. MMKV_MMKV使用教程
  8. Web自动化测试:超详细的环境搭建步骤
  9. PTES渗透测试执行标准
  10. Office 之将 PPT 图片完美插入 Word
  11. 6亿债务年底还完,老罗“真还传”即将完结
  12. 单片机STM32低功耗
  13. matlab黄金分割实例,实战案例教你黄金分割
  14. TeamTalk IM_PDUBASE详解
  15. Win10查看已存储WiFi密码的两种方法
  16. 安卓获取指定目录内所有指定文件类型的文件路径和名字
  17. 第16期高级转录组分析和R数据可视化培训(2022年1月)
  18. 持安科技CEO何艺:零信任在实战攻防演练中的价值
  19. mysql 截断日期_数据截断:错误的日期时间值:“
  20. 阿里云API网关调用示例

热门文章

  1. 盘点国内外8个好用的二维码平台
  2. 用Unity3D开发2D小游戏 Flappy Bird
  3. CodeChef March Challenge 2017 题解
  4. 第25讲 时序电路定时与异步交互
  5. html文本分割文字和图片
  6. 基于AXI VDMA的图像采集系统
  7. 地震频发,哪些技术帮助地震预测更精准?
  8. Intel Aero飞行日记
  9. 本地生活小程序有什么功能_本地生活小程序的优势
  10. 携号转网最大赢家是中国电信,为何人们嫌弃中国移动和中国联通?