博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu_1848_Fibonacci again and again(博弈sg函数)
阅读量:4709 次
发布时间:2019-06-10

本文共 929 字,大约阅读时间需要 3 分钟。

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

题意:给你3堆石子,每次只能取fibonacci数的石子,问先手是否能赢

题解:SG函数模版题

1 #include
2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 /* 4 计算从0-N范围内的SG值。 5 s(存储可以走的步数,s[0]表示可以有多少种走法) 6 s[]需要从小到大排序 7 1.可选步数为1~m的连续整数,直接取模即可,SG(x)=x%(m+1); 8 2.可选步数为任意步,SG(x) = x; 9 3.可选步数为一系列不连续的数,用GetSG()计算10 */11 const int N=1001;12 int sg[N];bool hash[N];13 void get_sg(int *s,int N){14 F(i,0,N)sg[i]=0;15 F(i,1,N){16 F(j,0,N)hash[j]=0;17 for(int j=1;s[j]<=i&&j<=s[0];j++)hash[sg[i-s[j]]]=1;18 F(j,0,N)if(!hash[j]){sg[i]=j;break;}19 }20 }21 int f[20],n,m,p;22 int main(){23 f[1]=1,f[2]=2,f[0]=16;24 F(i,3,16)f[i]=f[i-1]+f[i-2];25 get_sg(f,1000);26 while(~scanf("%d%d%d",&m,&n,&p),m+n+p){27 if(sg[m]^sg[n]^sg[p])puts("Fibo");28 else puts("Nacci");29 }30 return 0;31 }
View Code

 

 

转载于:https://www.cnblogs.com/bin-gege/p/5696122.html

你可能感兴趣的文章
熊二周刊--20160925
查看>>
Activiti源码分析
查看>>
c程序设计语言_习题8-6_利用malloc()函数,重新实现c语言的库函数calloc()
查看>>
Docker相关概念
查看>>
wordclock中文模式快一个小时怎么调整
查看>>
缓冲区溢出实战教程系列(二):dev c++编译汇编代码
查看>>
娓娓道来c指针 (3)指针和数组
查看>>
关于js基础easy忘记的那些事儿
查看>>
(String)、toString、String.valueOf用法区别(转)
查看>>
rpm命令安装软件
查看>>
oracle相关操作,存储、临时表空间、用户操作、启动过程
查看>>
Python 2.基础
查看>>
使用命令行连接本地mySql数据库的若干方法
查看>>
PHP 微信分享
查看>>
给所有的Control加两个属性,实现回车键自动跳转到下一个控件
查看>>
使用正则表达式,取得点击次数,函数抽离
查看>>
数据库设计——评论回复功能
查看>>
Dll 使用 PChar 参数的小例子 - 回复 "linximf" 的问题
查看>>
跟我一起学kafka(一)
查看>>
Sql统计一个字符串在另一个字符串出现的次数的函数-fnQueryCharCountFromString
查看>>