- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
博弈-SG函数
/downloads156/ebook/detail696143.html /gzprogramming/blog/category/%D7%E9%BA%CF%B2%A9%DE%C4 博弈----高级兵法-------SG函数先看HDU--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……就是菲波那契数列。今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下:1、??这是一个二人游戏;2、??一共有3堆石子,数量分别是m, n, p个;3、??两人轮流走;4、??每走一步可以选择任意一堆石子,然后取走f个;5、??f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);6、??最先取光所有石子的人为胜者;假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢Input输入数据包含多个测试用例,每个测试用例占一行,包含3个整数m,n,p(1=m,n,p=1000)。m=n=p=0则表示输入结束。Output如果先手的人能赢,请输出“Fibo”,否则请输出“Nacci”,每个实例的输出占一行。Sample Input1 1 11 4 10 0 0Sample OutputFiboNacci对于每次取的特殊规则,找出SG函数值,然后这些SG值做异或,异或=0就输了!下面是模版-------这种题直接套模版就行----------int mex1(int p){ int i,t; bool g[101]={0}; for(i=0;ik;i++) //k是fibo数组的个数 { t=p-fibo[i];// fibo[i]是题中定义的特殊取法规则的数组(上面题里的 1, 2 ,3 ,5 ,8 ,13 ,21 ) if(t0) break; if (f[t]==-1) //f[] 表示 存放SG 函数值的数组 f[t]=mex1(t); g[f[t]]=1; } for(i=0;;i++) { if (!g[i]) return i; }} Mex1()函数就可以返回SG(I)的值,牛吧!直接用吧,别深挖了!还是看代码吧!// hdu 1848#include cstdlib#include iostream#include algorithmusing namespace std;int k,fibo[100],f[10001];int mex1(int p){ int i,t; bool g[101]={0}; for(i=0;ik;i++) //注意 i从0开始,别动i { t=p-fibo[i]; if(t0) break; if (f[t]==-1) f[t]=mex1(t); g[f[t]]=1; } for(i=0;;i++) //好像必须从0开始啊 { if (!g[i]) return i; }} int main(int argc, char *argv[]){ int m,n,p,s; fibo[0]=1; //也从0开始 ,别动 fibo[1]=2; for(int i=2;i=18;i++)//为啥就到18呢,因为fibo[18]就大于1000了,本题范围是1000 fibo[i]=fibo[i-1]+fibo[i-2]; k=19;//取数规则的个数 fibo[]的个数 sort(fibo,fibo+k); //排序 本题这句可以不用,因为fibo已经排好序了,带着好,免得错! memset(f,-1,sizeof(f)); f[0]=0; for(int i=1;i=1000;i++) f[i]=mex1(i); while(scanf(%d%d%d,m,n,p)) { if (m==0n==0p==0) break; s=0; s=s^f[m]^f[n]^f[p]; if (s==0) printf(Nacci\n); else printf(Fibo\
您可能关注的文档
最近下载
- 2025至2030全球及中国荧光微球行业调研及市场前景预测评估报告.docx VIP
- NB_T 10091-2018高压开关设备温度在线监测装置技术规范.pdf
- 单缸液压圆锥破操作保养规程.docx VIP
- 六年级(上)语文1-28课核心考点汇总.pdf VIP
- 夏商周考古思考题.pdf VIP
- 2025年铁路局招聘考试题库《铁路基础知识》及答案.docx VIP
- 武汉大学泛函分析讲义.3.1共轭空间与共轭算子.pdf VIP
- 浅析全自动钠离子交换器.doc VIP
- 山东省聊城市东昌府区文轩湖西校区2024-2025学年八年级上学期期中地理试题.docx VIP
- GB_T 3246.1-2024 变形铝及铝合金制品组织检验方法 第1部分:显微组织检验方法.pdf VIP
原创力文档


文档评论(0)