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