现在的位置: 首页 > 综合 > 正文

hdu 1848 Fibonacci&nbs…

2018年03月17日 ⁄ 综合 ⁄ 共 746字 ⁄ 字号 评论关闭
思路:SG函数的应用,可取的值为不连续的固定值,可用GetSG求出SG,然后三堆数异或。

//0MS   
240K

#include
#include
const int M = 1005;
int Fibs[M],SG[M],hash[M];
void Fib()
{
    Fibs[1] =
1;
    Fibs[2] =
2;
    for (int i =
3;Fibs[i] < M ; i ++)
       
Fibs[i] = Fibs[i-2] + Fibs[i-1];
    return
;
}
void GetSG()
{
    int
i,j;
    memset
(SG,0,sizeof(SG));
    for (i = 1;i
< M;i ++)
    {
       
memset (hash,0,sizeof(hash));
       
for (j = 1;Fibs[j] <= i;j ++)
           
hash[SG[i-Fibs[j]]] = 1;
       
for (j = 0;j < M;j ++)
           
if (!hash[j])
           
{
               
SG[i] = j;
               
break;
           
}
    }
    return
;
}
int main ()
{
    Fib();
   
GetSG();
    int
n,m,p;
    while (scanf
("%d%d%d",&n,&m,&p))
    {
       
if (n==0&&m==0&&p==0)
           
break;
       
if (SG[m]^SG[n]^SG[p])
           
printf ("Fibo\n");
       
else printf ("Nacci\n");
    }
    return
0;
}

【上篇】
【下篇】

抱歉!评论已关闭.