TOJ 1070 Ouroboros Snake 解题

方法感觉写起来有点像宽搜。
就是每次生成就好了
 1#include<stdio.h>
 2#include<string.h>
 3int s[33000],use[33000],now[33000],data[16][33000];
 4int n,n2,p,q,v,f,i,k;
 5int main()
 6{
 7    for(n=2;n<=15;n++)
 8    {
 9        n2=1<<n;
10        memset(use,0,sizeof(use));
11        p=q=0;
12        s[p++]=0;
13        while(p>0)
14        {
15            v=s[p-1];
16            for(f=0;f<2;f++)
17                if(!use[(v<<1)+f])break;
18                if(f>=2){now[q++]=v;p--;}
19                else
20                {
21                    use[(v<<1)+f]=1;
22                    s[p++= ((v<<1+ f ) & ((n2>>1-1);
23                }

24        }

25          for(int i=0;i<n2;i++
26          data[n][i]=(now[n2-i]<<1| (now[n2-i-1]);
27    }

28    data[1][0]=0;data[1][1]=1;
29    while(scanf("%d%d",&n,&k),n)printf("%d\n",data[n][k]);
30    return 0;
31}

32

posted on 2008-07-15 19:13 gong 阅读(170) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(6)

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜