HDU-1848-Fibonacci again and again(SG函数,博弈)
链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1848
题意:
任何一个大学生对菲波那契数列(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、  最先取光所有石子的人为胜者;
假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。
思路:
求出SG函数,判断
代码:
// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<string.h>
#include<set>
#include<queue>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int MOD = 1e9;
const int MAXN = 1e3+10;
int Vis[MAXN], Sg[MAXN];
int F[MAXN];
int n, m, p;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    F[1] = 1, F[2] = 2;
    for (int i = 3;F[i-1] <= 1000;i++)
        F[i] = F[i-1]+F[i-2];
    Sg[0] = 0;
    for (int i = 1;i <= 1000;i++)
    {
        memset(Vis, 0, sizeof(Vis));
        for (int j = 1;F[j] <= i;j++)
            Vis[Sg[i-F[j]]] = 1;
        for (int j = 0;;j++) if (Vis[j] == 0)
        {
            Sg[i] = j;
            break;
        }
    }
    while(~scanf("%d%d%d", &n, &m, &p) && n)
    {
        if ((Sg[n]^Sg[m]^Sg[p]) == 0)
            puts("Nacci");
        else
            puts("Fibo");
    }
    return 0;
}
HDU-1848-Fibonacci again and again(SG函数,博弈)的更多相关文章
- HDU 1848 Fibonacci again and again(SG函数)
		Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ... 
- HDU 1848 Fibonacci again and again SG函数做博弈
		传送门 题意: 有三堆石子,双方轮流从某堆石子中去f个石子,直到不能取,问先手是否必胜,其中f为斐波那契数. 思路: 利用SG函数求解即可. /* * @Author: chenkexing * @D ... 
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
		Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ... 
- hdu 1848 Fibonacci again and again(SG函数)
		Fibonacci again and again HDU - 1848 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)= ... 
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
		Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ... 
- HDU 1848 Fibonacci again and again【SG函数】
		对于Nim博弈,任何奇异局势(a,b,c)都有a^b^c=0. 延伸: 任何奇异局势(a1, a2,… an)都满足 a1^a2^…^an=0 首先定义mex(minimal excludant)运算 ... 
- hdu 1848 Fibonacci again and again (初写SG函数,详解)
		思路: SG函数的应用,可取的值为不连续的固定值,可用GetSG求出SG,然后三堆数异或. SG函数相关注释见代码: 相关详细说明请结合前一篇博客: #include<stdio.h> # ... 
- HDU 1848 Fibonacci again and again(SG函数入门)题解
		思路:SG打表 参考:SG函数和SG定理[详解] 代码: #include<queue> #include<cstring> #include<set> #incl ... 
- hdu 1848 Fibonacci again and again 组合游戏 SG函数
		题目链接 题意 三堆石子,分别为\(m,n,p\)个,两人依次取石子,每次只能在一堆当中取,并且取的个数只能是斐波那契数.最后没石子可取的人为负.问先手会赢还是会输? 思路 直接按定义计算\(SG\) ... 
- HDU 1848 Fibonacci again and again【博弈SG】
		Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F( ... 
随机推荐
- dp + 预处理前缀和 - HNU 13248 Equator
			Equator Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13248&cour ... 
- 2019 ICPC 银川站
			I. Base62(高精度进制转换) 比赛当时雷菊苣和队长俩人拿着大数板子摸了一百多行(然后在缺少大数板子的情况下雷菊苣一发过了orz) 今天补题随便摸了个高精度进制转换的板子交上去就过了还贼短,, ... 
- Java学习:数组的使用和注意事项
			数组 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 数组是一种引用数据类型 数组当中的多个数据,类型必须统一 数组的长度在程序运行期间不可以改变 数组的初始化:在内存当中创建一个数组, ... 
- mysql 中的日期格式。date_format( ) 转换格式
			date_format( ) 转换格式 : 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) ... 
- CentOS7 firewalld防火墙 启动 关闭 禁用 添加删除规则等 常用命令
			CentOS7 firewalld防火墙 常用命令1.firewalld的基本使用启动: systemctl start firewalld关闭: systemctl stop firewalld查看 ... 
- 用这个模型去理解CPU?
- 世界上最大的软件注册表-----npm
			npm 是什么? npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门.它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(pack ... 
- 编写可维护的JavaScript-随笔(三)
			UI层的松耦合 本章提出了一个概念就是耦合 假设修改一个组件的时候需要修改很多其他的组件的话则表示组件之间存在紧耦合 如果修改一个组件而不需要修改其他组件的时候就做到了松耦合 页面是由HTML.CSS ... 
- 基于elementUI创建的vue项目
			这周对公司的内容使用vue进行重构,所以记录一下开始项目的过程 下载elementUI: 项目文件夹中在命令行中输入:npm install elementui -s 下载完成后在 main.js 中 ... 
- Jnetpcap简述
			Jnetpcap简述 最近需要做一个本地网络流量分析的项目,基于 Java 语言,上网查了很多资料,最后利用 Jnetpcap 实现了,这里做个记录. 这里先列一下我用到的工具以及版本: Eclips ... 
