比赛 2025暑期集训第7场 评测结果 ATAAAAAAAA
题目名称 填数 最终得分 90
用户昵称 20120223 运行时间 4.309 s
代码语言 C++ 内存使用 3.65 MiB
提交时间 2025-08-11 17:17:12
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int num[155];
int yu[15][15]={0},ans[15][15]={0};
int n;
bool v[155]={0};
bool s(int x,int y)
{
    int r=x+y;
    if(r==x)return true;
    if(r<2)return false;
    for(int i=2;i*i<=r;i++)
    if(r%i==0)return false;
    return true;
}
bool up()
{
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    if(yu[i][j]<ans[i][j])return true;
    if(yu[i][j]>ans[i][j])return false;
    }
    return true;
}
void dfs(int i,int j)
{
    int w;
    if(j==1)w=yu[i-1][j]%2*(-1)+3;
    else w=yu[i][j-1]%2*(-1)+3;
    if(i==n+1)
    {
        if(ans[1][1]==0||up())
        {
            for(int ia=1;ia<=n;ia++)
            for(int ja=1;ja<=n;ja++)
            ans[ia][ja]=yu[ia][ja];
        }
        return;
    }
    for(int ia=w;ia<=n*n;ia+=2)
    {
        if(s(ia,yu[i-1][j])&&s(ia,yu[i][j-1]))
        if(!v[ia]&&(ia<ans[i][j]||ans[i][j]==0))
        {
            yu[i][j]=ia;
            v[ia]=1;
            if(j==n)dfs(i+1,1);
            else dfs(i,j+1);
            yu[i][j]=0;
            v[ia]=0;
        }
    }
}
int  main()
{
freopen("tianshu.in","r",stdin);	
    freopen("tianshu.out","w",stdout);
   cin>>n;
   yu[1][1]=1;
   dfs(1,2);
   if(ans[1][1]==0)
   {
       cout<<"NO";
       return 0;  
   }
   for(int i=1;i<=n;i++)
   {
   for(int j=1;j<=n;j++)
   cout<<ans[i][j]<<" ";
   cout<<endl;
   }
    return 0;
}