比赛 2025暑期集训第7场 评测结果 AWWWWWWWWA
题目名称 填数 最终得分 20
用户昵称 xxz 运行时间 0.026 s
代码语言 C++ 内存使用 3.75 MiB
提交时间 2025-08-11 14:54:35
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,g[50][50],dxy[5][2]={{0,0},{0,1},{0,-1},{1,0},{-1,0}},t[130],nx,ny,ffflag;
bool prime(long long x){
	if(x<2)return 0;
	else{
		for(int i=2;i*i<=x;i++){
			if(x%i==0)return 0;
		}
	}
	return 1;
}
bool chk(int x,int y){
	return x>=1&&x<=n&&y>=1&&y<=n&&!g[x][y];
}
bool pchk(int x,int y){
	return x>=1&&x<=n&&y>=1&&y<=n;
}
void dfs(int x,int y,int step){//printf("%d %d %d\n",x,y,step);
	if(ffflag)return;
	if(step==n*n){
		g[x][y]=n*n;
		ffflag=1;
		return;
	}
	for(int o=1;o<=4;o++){
		
		if(ffflag)return;
		nx=x+dxy[o][0],ny=y+dxy[o][1];
		if(!chk(nx,ny))continue;
		// printf("nx:%d ny:%d\n",nx,ny);
		for(int i=2;i<=n*n;i++){
			if(t[i])continue;
			if(ffflag)return;
			bool flag=0;
			for(int p=1;p<=4;p++){
				if(!pchk(nx+dxy[p][0],ny+dxy[p][1]))continue;
				if(g[nx+dxy[p][0]][ny+dxy[p][1]]){
					
					if(!prime(i+g[nx+dxy[p][0]][ny+dxy[p][1]])){
						flag=1;
					}
					// printf("!!: %d %d %d %d\n",nx+dxy[p][0],ny+dxy[p][1],g[nx+dxy[p][0]][ny+dxy[p][1]],flag);
				}
			}
			// if(flag)continue;
			g[nx][ny]=step+1;t[i]=1;
			dfs(nx,ny,step+1);
			if(ffflag)return;
			g[nx][ny]=0;t[i]=0;
		}
		if(ffflag)return;
	}
	return;
}
signed main(){
	freopen("tianshu.in","r",stdin);freopen("tianshu.out","w",stdout);
	cin>>n;
	// printf("%d",prime(n));
	t[1]=1;
	if(n==1){
		printf("NO");return 0;
	}
	g[1][1]=1;
	dfs(1,1,1);
	if(!ffflag){
		printf("NO");
		return 0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			printf("%lld ",g[i][j]);
		}
		printf("\n");
	}
	return 0;
}