ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HDU1848 Fibonacci again and again (SG函数)

2022-09-13 19:30:43  阅读:164  来源: 互联网

标签:again HDU1848 int MAX fib SG sg 函数


题目链接在这里:Problem - 1848 (hdu.edu.cn)

首先要理解sg函数的作用,sg函数就是将一个ICG博弈问题转化为Nim博弈的东西,因此在一个ICG博弈中,构造出sg函数就非常重要。sg函数也可以用树形结构来表示,这里可以看算法讲堂里面说的,对于本题来说构造的过程也就是,第i个节点是第i-fib[j]节点的父亲,fib中存的是Fibonacci数列。

这题算是很基础的sg函数模型,只要知道树形结构怎么构造就行了。

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 const int MAX=1005;
 4 int fib[MAX];
 5 int sg[MAX];
 6 bool flag[MAX];
 7 void getsg(){
 8     int i,j;
 9     memset(sg,0,sizeof(sg));
10     for (i=1;i<=1001;i++){
11         memset(flag,false,sizeof(flag));
12         for (j=1;j<=20 && fib[j]<=i;j++)
13             flag[sg[i-fib[j]]]=true;
14         for (j=0;j<=i;j++)
15             if (!flag[j]){
16                 sg[i]=j;
17                 break;
18             }
19     }
20 }
21 int main(){
22     int i,j,a,b,c;
23     fib[1]=1,fib[2]=2;
24     for (i=3;i<=20;i++)
25         fib[i]=fib[i-1]+fib[i-2];
26     getsg();
27     while (scanf("%d%d%d",&a,&b,&c),!(a==0 && b==0 && c==0)){
28         if (sg[a]^sg[b]^sg[c])
29             printf("Fibo\n");
30         else printf("Nacci\n");
31     }
32     return 0;
33 }

 

标签:again,HDU1848,int,MAX,fib,SG,sg,函数
来源: https://www.cnblogs.com/keximeiruguo/p/16690439.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有