hdu_1848(SG函数)
2016-06-20 20:35
246 查看
博弈论SG函数的最基本用法,
代码参考:http://www.cnblogs.com/vongang/archive/2011/09/24/2189393.html
#include<stdio.h>
#include<string.h>
#include<algorithm>
int main()
{
int sg[1000+100];
int f[100];
f[1]=1,f[2]=2;
int i,q,w;
for(i=3;;i++)
{
f[i]=f[i-1]+f[i-2];
if(f[i]>=1000+100)break;
}
sg[0]=0;
sg[1]=1;
int hash[30];
for(i=1;i<=1000+99;i++)
{
memset(hash,0,sizeof(hash));
for(q=1;f[q]<=i;q++)
{
hash[sg[i-f[q]]]=1;
}
for(q=0;q<=30;q++)
{
if(hash[q]==0)
{
sg[i]=q;
break;
}
}
}
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if(a==0||b==0||c==0)break;
if(sg[a]^sg[b]^sg[c])
{
printf("Fibo\n");
}
else printf("Nacci\n");
}
return 0;
}
代码参考:http://www.cnblogs.com/vongang/archive/2011/09/24/2189393.html
#include<stdio.h>
#include<string.h>
#include<algorithm>
int main()
{
int sg[1000+100];
int f[100];
f[1]=1,f[2]=2;
int i,q,w;
for(i=3;;i++)
{
f[i]=f[i-1]+f[i-2];
if(f[i]>=1000+100)break;
}
sg[0]=0;
sg[1]=1;
int hash[30];
for(i=1;i<=1000+99;i++)
{
memset(hash,0,sizeof(hash));
for(q=1;f[q]<=i;q++)
{
hash[sg[i-f[q]]]=1;
}
for(q=0;q<=30;q++)
{
if(hash[q]==0)
{
sg[i]=q;
break;
}
}
}
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if(a==0||b==0||c==0)break;
if(sg[a]^sg[b]^sg[c])
{
printf("Fibo\n");
}
else printf("Nacci\n");
}
return 0;
}
相关文章推荐
- 通用链表操作接口函数
- 运算符重载的函数(3)
- c高级字长字节序对齐
- sql查询优化 索引优化
- c高级c存储类型
- 【剑指offer】(扩展)求链表中间结点
- 【设计模式】备忘录模式
- select from table where 1=1
- 第十六周上机实践项目4(3):程序设计
- 爱因斯坦的题目C语言解法(老贴)
- 不同厂家的电脑进入bios的快捷键整理汇总
- 第127课: Spark Streaming源码经典解读系列之二:Spark Streaming生成RDD
- 性能测试——造数
- 键盘遮挡———视图随键盘移动
- C# II: Class ViewModelBase and RelayCommand in MVVM
- 异常解决:A master URL must be set in your configuration
- 委托
- 《构建之法》第六章
- 安卓应用实时显示MJGP-streamer所抓取的摄像头信息
- 静态库改为动态库后,可以影响到程序的执行结果