题目:http://acm.hdu.edu.cn/showproblem.php?pid=1848


题意:有3堆石子,石子数量分别为a,b,c,有两个玩家,每次只能从任意一堆中取f个,这里的f只能为fibnacci数,问是先手胜

还是先手败.


分析:由于石子的数量都在1000以内,那么我们可以先预处理出1000以内的SG函数值,然后对于3堆石子,我们进行异或,如果为

0说明先手必败,否则必胜,当然求SG函数的值用深搜就行了.


#include <iostream>
#include <string.h>
#include <stdio.h>using namespace std;
const int N = 1005;
const int M = 25;int fib[25];
int SG[N];int mex(int x)
{bool vis[M];memset(vis,0,sizeof(vis));for(int i=0;i<M;i++){int t = x - fib[i];if(t < 0) break;if(SG[t] == -1)SG[t] = mex(t);vis[SG[t]] = 1;}for(int i=0;;i++)if(!vis[i]) return i;
}void Init()
{fib[0] = 1;fib[1] = 2;for(int i=2;i<M;i++)fib[i] = fib[i-1] + fib[i-2];memset(SG,-1,sizeof(SG));for(int i=0;i<N;i++)SG[i] = mex(i);
}int main()
{Init();int a,b,c;while(~scanf("%d%d%d",&a,&b,&c)){if(a == 0 && b == 0 && c == 0) break;int ans = 0;ans ^= SG[a];ans ^= SG[b];ans ^= SG[c];if(ans) puts("Fibo");else    puts("Nacci");}return 0;
}

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1536


分析:本题基本上跟上体一样,只是把3堆改为x堆,把取fibnacci数列颗石子改为取指定输入的石子个数.那么做法实际上一

样,我们对输入的序列进行排序,然后求出它们的SG函数的值,然后直接用即可.


#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>using namespace std;
const int N = 10005;
const int M = 105;int a[M];
int SG[N];
int n;int mex(int x)
{bool vis[M];memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){int t = x - a[i];if(t < 0) break;if(SG[t] == -1)SG[t] = mex(t);vis[SG[t]] = 1;}for(int i=0;;i++)if(!vis[i]) return i;
}int main()
{while(~scanf("%d",&n)){if(n == 0) break;for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);memset(SG,-1,sizeof(SG));for(int i=0;i<N;i++)SG[i] = mex(i);int m;scanf("%d",&m);while(m--){int ans = 0;int len,t;scanf("%d",&len);for(int i=0;i<len;i++){scanf("%d",&t);ans ^= SG[t];}if(ans) printf("W");else    printf("L");}puts("");}return 0;
}


取石子游戏与SG函数相关推荐

  1. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛B 取石子(博弈SG函数模板)

    题目链接:取石子 链接:https://www.nowcoder.com/acm/contest/122/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65 ...

  2. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  3. bzoj1874: [BeiJing2009 WinterCamp]取石子游戏

    1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 834  Solved: 350 ...

  4. 4005. 取石子游戏

    Powered by:NEFU AB-IN Link 文章目录 4005. 取石子游戏 题意 思路 代码 4005. 取石子游戏 题意 Alice 和 Bob 正在玩一个取石子游戏. 共有 n个石子, ...

  5. 51nod3431 取石子游戏

    3431 取石子游戏 小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问 ...

  6. Nim 游戏和 SG 函数

    Nim游戏 Nim游戏定义 Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于"Impartial Combinatorial Games"(以下 ...

  7. 【acm 博弈论 】 之 Nim游戏与sg函数

    文章目录 前言 巴什博弈 威佐夫博弈 Nim游戏 Nim游戏与sg函数 题目 题意 样例 思路 代码 前言 从今天开始复习和整理下acm的部分模块,从博弈论开始. 著名的"取石子" ...

  8. 【学习笔记】NIM游戏与SG函数初探

    公平组合游戏ICG 游戏条件介绍: 由两名玩家交替行动 游戏进程的任意时刻,可以执行的合法行动与轮到的玩家无关 若当前玩家无法行动,则判负 则称该组合游戏为公平组合游戏.如NIM游戏等即是经典的公平组 ...

  9. 博弈论之取石子游戏的学习

    以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策 游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输 对任何一种局面,胜负只决定于局 ...

最新文章

  1. 在vs2008中配置OpenCV2.2
  2. go channel 缓冲区最大限制_GO语言圣经学习笔记(八)Goroutines和Channels
  3. Linux性能监控和调试
  4. 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
  5. 数据库-优化-数据库系统配置优化-操作系统优化
  6. mac 没有所有开发者_为什么开发人员应该像产品所有者那样思考
  7. java list遍历添加元素_java遍历List过程中添加和删除元素的问题
  8. git-ssh 配置和使用
  9. 数组求最大公约数c语言,C语言辗转相除法求2个数的最小公约数
  10. Java基础学习总结(73)——Java最新面试题汇总
  11. HDU 3416 Marriage Match IV
  12. 334个地级市名单_中国各级行政区划数量,统计到乡镇一级
  13. 页面字体颜色的设置及常用颜色的RGB值
  14. win10 1050ti anaconda搭建tensorflow-gpu
  15. Oracle数据库如何保存中文特殊字符到数据库表中,防止出现问号
  16. 分群思维(六)分群思维的顶层应用-用户画像
  17. mysql 8安装方法_Mysql8.0.17安装教程【推荐】
  18. uniapp 在h5 模式下扫码
  19. 网络爬虫学习第二弹:requests库的使用
  20. 搭建社群积分系统,使用这个工具足以

热门文章

  1. Spring Bean 作用域之间的区别?
  2. Spring 核心和容器的一般更新
  3. TCP/IP的七层负载均衡
  4. 概述类的加载器及类加载过程
  5. Nginx限流-并发量限流配置
  6. MapReduce案例-wordcount-Reduce阶段代码
  7. Objects非空判断_requireNonNull方法
  8. 魔兽服务器状态页面,谁动了我的服务器 WOW大服务器优势何时展现
  9. 2核4g服务器选啥系统好,云服务器2核4g可以做什么
  10. 互联网协议套件(TCP/IP)及七层OSI模型