1 条题解

  • 0
    @ 2024-7-27 15:53:16
    #include<bits/stdc++.h>
    using namespace std;
    bool prime[100001];
    void prim(){
        for(register int i=2;i<=sqrt(100000);i++){
            if(!prime[i]){
                for(register int j=i+i;j<=100000;j+=i)prime[j]=1;
            }
        }
    }
    struct data{
        int a[6][6];
        bool operator <(const data &d)const{
            for(register int i=1;i<=5;i++){
                for(register int j=1;j<=5;j++){
                    if(a[i][j]<d.a[i][j])return 1;
                    else if(a[i][j]>d.a[i][j])return 0;
                }
            }
            return 0;
        }
        bool operator =(const data &d){
            for(register int i=1;i<=5;i++){
                for(register int j=1;j<=5;j++){
                    a[i][j]=d.a[i][j];
                }
            }
        }
    }bas[10001];
    int sum,s,top=0;
    bool check(int a1,int a2,int a3,int a4,int a5){
        int num=a1*10000+a2*1000+a3*100+a4*10+a5;
        if(num<10000)return 0;
        return !prime[num];
    }
    void f7(){
        for(register int i=0;i<=9;i++){
            bas[top].a[1][3]=i;
            int num=sum-bas[top].a[1][1]-bas[top].a[1][2]-bas[top].a[1][3]-bas[top].a[1][5];
            if(num>9||num<0)continue;bas[top].a[1][4]=num;
            if(!check(bas[top].a[1][1],bas[top].a[1][2],bas[top].a[1][3],bas[top].a[1][4],bas[top].a[1][5]))continue;
            
            num=sum-bas[top].a[1][3]-bas[top].a[2][3]-bas[top].a[3][3]-bas[top].a[4][3];
            if(num>9||num<0)continue;bas[top].a[5][3]=num;
            if(!check(bas[top].a[1][3],bas[top].a[2][3],bas[top].a[3][3],bas[top].a[4][3],bas[top].a[5][3]))continue;
            
            num=sum-bas[top].a[5][1]-bas[top].a[5][2]-bas[top].a[5][3]-bas[top].a[5][5];
            int num2=sum-bas[top].a[1][4]-bas[top].a[2][4]-bas[top].a[3][4]-bas[top].a[4][4];
            if(num>9||num<0||num2!=num)continue;
            bas[top].a[5][4]=num;
            if(!check(bas[top].a[5][1],bas[top].a[5][2],bas[top].a[5][3],bas[top].a[5][4],bas[top].a[5][5])||!check(bas[top].a[1][4],bas[top].a[2][4],bas[top].a[3][4],bas[top].a[4][4],bas[top].a[5][4]))continue;
            top++;bas[top]=bas[top-1];
        }
    }
    void f6(){
        for(register int i=0;i<=9;i++){
            bas[top].a[1][2]=i;
            int num=sum-bas[top].a[1][2]-bas[top].a[2][2]-bas[top].a[3][2]-bas[top].a[4][2];
            if(num>9||num<0)continue;bas[top].a[5][2]=num;
            if(check(bas[top].a[1][2],bas[top].a[2][2],bas[top].a[3][2],bas[top].a[4][2],bas[top].a[5][2]))f7();
        }
    }
    void f5(){
        for(register int i=0;i<=9;i++){
            bas[top].a[3][5]=i;
            int num=bas[top].a[4][5]=sum-bas[top].a[1][5]-bas[top].a[2][5]-bas[top].a[3][5]-bas[top].a[5][5];
            if(num>9||num<0)continue;
            if(!check(bas[top].a[1][5],bas[top].a[2][5],bas[top].a[3][5],bas[top].a[4][5],bas[top].a[5][5]))continue;
            
            num=bas[top].a[4][3]=sum-bas[top].a[4][1]-bas[top].a[4][2]-bas[top].a[4][4]-bas[top].a[4][5];
            if(num>9||num<0)continue;
            if(!check(bas[top].a[4][1],bas[top].a[4][2],bas[top].a[4][3],bas[top].a[4][4],bas[top].a[4][5]))continue;
            
            num=sum-bas[top].a[3][1]-bas[top].a[3][3]-bas[top].a[3][4]-bas[top].a[3][5];
            if(num>9||num<0)continue;bas[top].a[3][2]=num;
            if(check(bas[top].a[3][1],bas[top].a[3][2],bas[top].a[3][3],bas[top].a[3][4],bas[top].a[3][5]))f6();
        }
    }
    void f51(){
        for(register int i=0;i<=9;i++){
            bas[top].a[3][4]=i;
            f5();
        }
    }
    void f4(){
        for(int i=0;i<=9;i++){
            bas[top].a[1][5]=i;
            int num=sum-bas[top].a[5][1]-bas[top].a[1][5]-bas[top].a[3][3]-bas[top].a[2][4];
            if(num>9||num<0)continue ;bas[top].a[4][2]=num;
            if(check(bas[top].a[5][1],num,bas[top].a[3][3],bas[top].a[2][4],bas[top].a[1][5]))f51();
        }
    }
    void f3(){
        for(register int i=0;i<=9;i++){
            bas[top].a[2][5]=i;
            int num=sum-bas[top].a[2][1]-bas[top].a[2][2]-bas[top].a[2][4]-bas[top].a[2][5];
            if(num>9||num<0)continue ;bas[top].a[2][3]=num;
            if(check(bas[top].a[2][1],bas[top].a[2][2],num,bas[top].a[2][4],bas[top].a[2][5]))f4();
        }
    }
    void f31(){
        for(int i=0;i<=9;i++){
            bas[top].a[2][4]=i;
            f3();
        }
    }
    void f2(){
        for(register int i=0;i<=9;i++){
            bas[top].a[5][1]=i;
            int num=sum-bas[top].a[1][1]-bas[top].a[3][1]-bas[top].a[4][1]-bas[top].a[5][1];
            if(num>9||num<0)continue ;
            bas[top].a[2][1]=num;
            if(check(bas[top].a[1][1],num,bas[top].a[3][1],bas[top].a[4][1],bas[top].a[5][1]))f31();
        }
    }
    void f22(){
        for(int i=0;i<=9;i++){
            bas[top].a[4][1]=i;
            f2();
        }
    }
    void f21(){
        for(int i=0;i<=9;i++){
            bas[top].a[3][1]=i;
            f22();
        }
    }
    void f1(){
        
        for(register int i=0;i<=9;i++){
            bas[top].a[5][5]=i;
            int num=sum-bas[top].a[1][1]-bas[top].a[3][3]-bas[top].a[4][4]-bas[top].a[5][5];
            if(num>9||num<0)continue ;
            bas[top].a[2][2]=num;
            if(check(bas[top].a[1][1],num,bas[top].a[3][3],bas[top].a[4][4],bas[top].a[5][5]))f21();
        }
    }
    void f12(){
        for(int i=0;i<=9;i++){
            bas[top].a[4][4]=i;
            f1();
        }
    }
    void f11(){
        for(int i=0;i<=9;i++){
            bas[top].a[3][3]=i;
            f12();
        }
    }
    void does(){
        bas[top].a[1][1]=s;
        f11();
        sort(bas,bas+top);
        for(int i=0;i<top;i++){
            for(int j=1;j<=5;j++){
                for(int k=1;k<=5;k++){
                    cout<<bas[i].a[j][k];
                }
                cout<<endl;
            }
            cout<<endl;
        }
    }
    int main(){
        prim();
        cin>>sum>>s;
        does();
        return 0;
    }
    
    • 1

    信息

    ID
    614
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    2
    上传者