HDU 1848 SG函数博弈
Fibonacci again and again
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、 最先取光所有石子的人为胜者;
假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。
m=n=p=0则表示输入结束。
1 4 1
0 0 0
Nacci
题解:
吧斐波那契数组处理出来
就是这题了:这题
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
const long long INF = 1e18+1LL;
const double Pi = acos(-1.0);
const int N = 5e5+, M = 2e5+, mod = 1e9+, inf = 2e9; int f[N],n,m,p,sg[N],vis[N];
int main() {
f[] = ; f[] = ;
int cnt = ;
for(int i = ; ; ++i,++cnt) {
f[i] = f[i-] + f[i-];
if(f[i] > ) break;
}
sg[] = ;
for(int i = ; i <= ; ++i) {
for(int j = ; j <= cnt; ++j) {
if(f[j] > i) break;
vis[sg[i - f[j]]] = ;
}
for(int j = ; j <= ; ++j) if(!vis[j]){ sg[i] = j;break;}
for(int j = ; j <= cnt; ++j) {
if(f[j] > i) break;
vis[sg[i - f[j]]] = ;
}
} while(scanf("%d%d%d",&n,&m,&p) && n &&m && p) {
if(sg[n] ^ sg[m] ^ sg[p]) {
puts("Fibo");
}else puts("Nacci");
}
return ;
}
HDU 1848 SG函数博弈的更多相关文章
- hdu 1848(SG函数)
		
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
 - hdu 1847(SG函数,巴什博弈)
		
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
 - 博弈问题之SG函数博弈小结
		
SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...
 - hdu 2147 SG函数打表(手写也可以) 找规律
		
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/1000 K (Java/Others) Total ...
 - SG函数博弈——poj2311
		
关于SG函数的博弈 首先定义必败态 x : SG[x]=0 设任意一个状态y,到所有y能到达的状态连一条边,令这些后继为z y : SG[y]=mex(SG[z]) SG[y]==0 : y就是必败态 ...
 - HDU 1536 sg函数
		
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
 - hdu 1536 SG函数模板题
		
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
 - HDU1536&&POJ2960   S-Nim(SG函数博弈)
		
S-Nim Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status ...
 - HDOJ 1848(SG函数)
		
对于SG函数来说,sg[y]=x的意义为,x与y的输赢状态是相同的 sg[y]=mex(y)的定义与n.p点的定义是相同的 #include<iostream>#include<cs ...
 
随机推荐
- MyBatis源码分析(5)——内置DataSource实现
			
@(MyBatis)[DataSource] MyBatis源码分析(5)--内置DataSource实现 MyBatis内置了两个DataSource的实现:UnpooledDataSource,该 ...
 - tomcat集群学习记录1--初识apache http server
			
起因 平时开发的时候我都是用eclipse把代码部署到本地tomcat的,当然只会去跑1台tomcat啦... 偶尔有时候解决问题需要去公司测试环境找日志.连上公司测试环境以后发现竟然有2台weblo ...
 - 引入DecimalFormat类进行数字格式化操作
			
引入语句:import java.text.DecimalFormat; 首先创建DecimalFormat类对象,利用类对象调用Format()方法进行格式化操作.这里有两种方法:①.Decimal ...
 - ActiveMQ入门实例
			
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
 - 关于ubuntu下sublime text 3 的安装和中文配置问题
			
一.sublime text 3 在ubuntu 16.04下的安装过程 1)首先下载sublime text 3 的tar包 $ wget https://download.sublimetext. ...
 - 常用Linux命令收集
			
关闭 php-fpm: ps -ef | grep php-fpm 或 ps aux | grep php-fpm kill -USR2 32253 (对应的进程PID) kill -9 进 ...
 - C++程序设计基础
			
01 1 预编译常用的有,宏定义和包含库.2 库:是实用工具的集和,由程序员编写,可以完成一些特定的功能.3 <> 系统库 ""用户自定义库.4 宏定义:定义符号常量, ...
 - PHP延迟静态绑定
			
类可以自下往上调用父类方法,如果需要在父类中根据不同的子类,来调用子类的方法,那么就需要延迟静态绑定.延迟静态绑定用的是保留关键词static. 所谓延迟静态绑定,顾名思义,静态调用时::符号左侧的部 ...
 - secureCRT The remote system refused the connection.
			
转 http://blog.csdn.net/lifengxun20121019/article/details/13627757 我在实践远程登录工具SecureCRT的时候遇到了这个问题 Ubun ...
 - TKT中文编程语言简介
			
TKT中文编程语言简介 TKT语言是新型的类似自然语言的汉语编程语言. 它是基于新的语言设计思想创造的语言,和现存的易语言.习语言.O语言.汉编等中文编程语言没有关系. TKT语言特点一: 中文编程 ...