比赛 NOIP_4 评测结果 AAAAAT
题目名称 数列问题 最终得分 83
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-09-19 21:42:21
显示代码纯文本
#include <stdio.h>

#define maxn 20

int n,ans,s[maxn],hash[maxn],su[maxn*5];
FILE *f1,*f2;

void search(int x)
{
	int i,flag;
	if (x>=n)
	{
		ans++;
		for (i=0;i<n-1;i++)
			fprintf(f2,"%d ",s[i]);
		fprintf(f2,"%d\n",s[n-1]);
		return;
	}
	for (i=1;i<=n;i++)
	{
		if (hash[i]==0)
		{
			flag=0;
			if (x==0)
				flag=1;
			else
				if (su[s[x-1]+i])
					flag=1;
			if (flag)
			{	
				s[x]=i;
				hash[i]=1;
				search(x+1);
				hash[i]=0;
			}
		}
	}
}

void run(void)
{
	search(0);
}

void ini(void)
{
	int i,j;
	fscanf(f1,"%d",&n);
	for (i=3;i<=n*3;i++)
	{
		su[i]=1;
		for (j=2;j<i;j++)
			if (i%j==0)
			{
				su[i]=0;
				break;
			}
	}
		
}

int main(void)
{
	f1=fopen("dfs3.in","r");
	f2=fopen("dfs3.out","w");
	ini();
	if (n==1)
		ans=0;
	else
	run();
	fprintf(f2,"%d",ans);
	fclose(f1);fclose(f2);
	return 0;
}