比赛 |
2025暑期集训第7场 |
评测结果 |
WTAAAAAAAA |
题目名称 |
填数 |
最终得分 |
80 |
用户昵称 |
pcx |
运行时间 |
3.517 s |
代码语言 |
C++ |
内存使用 |
3.66 MiB |
提交时间 |
2025-08-11 15:19:55 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,s,a[22][22];
bool v[250],p[250];
bool ck(int x,int y,int num){
int b=a[x-1][y],c=a[x][y-1];
if(x>0&&b&&!p[num+b]) return 0;
if(y>0&&c&&!p[num+c]) return 0;
return 1;
}
bool dfs(int pos){
if(pos==s) return 1;
int x=pos/n,y=pos%n;
if(!x&&!y) return dfs(pos+1);
for(int i=2;i<=s;i++){
if(!v[i]&&ck(x,y,i)){
v[i]=1;
a[x][y]=i;
if(dfs(pos+1)) return 1;
v[i]=0;
a[x][y]=0;
}
}
return 0;
}
int main(){
freopen("tianshu.in","r",stdin);
freopen("tianshu.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;s=n*n;
memset(p,true,sizeof(p));
memset(v,0,sizeof(v));
memset(a,0,sizeof(a));
a[0][0]=1;v[1]=1;
p[0]=p[1]=0;
for(int i=2;i*i<=241;i++){
if(p[i]){
for(int j=i*i;j<=241;j+=i){
p[j]=0;
}
}
}
if(dfs(1)){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
}else{
cout<<"NO";
}
return 0;
}