记录编号 465475 评测结果 AAAAA
题目名称 [HAOI 2004模拟]数列问题 最终得分 100
用户昵称 Gravatarsakura 是否通过 通过
代码语言 C++ 运行时间 0.094 s
提交时间 2017-10-27 08:31:48 内存使用 0.32 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int n,a[20],zs[40];
bool book[20],b4[20][20],b3[1000];
int s=0;
vector<int> b2[20];
void dfs(int x){
	if(x==n+1){
		for(int i=1;i<=n;i++)	printf("%d",a[i]);
		cout<<endl;
		s++;
		return;
	}
	for(int i=0;i<b2[a[x-1]].size();i++){
		if((!book[b2[a[x-1]][i]])){
			book[b2[a[x-1]][i]]=1;
			a[x]=b2[a[x-1]][i];
			dfs(x+1);
//			a[x]=0;
			book[b2[a[x-1]][i]]=0;
		}
		else continue;
	}
	return;
}
int main(){
	freopen("dfs3.in","r",stdin);
	freopen("dfs3.out","w",stdout);
	cin>>n;
	for(int i=1;i<=1000;i++) b3[i]=1;
	for(int i=2;i<=30;i++){
		for(int j=2;j<=30;j++){
			b3[i*j]=0;
		}
	}
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	if(b3[i+j]) b2[i].push_back(j);
	for(int i=1;i<=n;i++){
		a[1]=i;
		book[i]=1;
		dfs(2);
		book[i]=0;
		a[i]=0;
	}
	cout<<s;
}