比赛 |
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;
}