1 条题解
-
0117爱好者 (mengqingyu) LV 10 @ 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
- 上传者