终极搜索☞素数方阵
2018-03-11 16:03
295 查看
调了也有两三天吧,不说了,直接上代码吧。因为说多了都是泪啊。。反正代码里都有注释
这道题我真的从头彻尾地写了三次,用了三种不同的填数次序来写。第一次50,第二次20,第三次终于A了啊,喜极而泣啊。
又臭又长GG
不过AC的那一刹那当然还是很开心的。毕竟终极搜索a
呸 其实就差不多是个暴搜。。
这道题我真的从头彻尾地写了三次,用了三种不同的填数次序来写。第一次50,第二次20,第三次终于A了啊,喜极而泣啊。
#include<bits/stdc++.h> using namespace std; int sum,a[10][10],now,now1,now2,tot; int d[4]={1,3,7,9}; bool isprime[1000010]; string ans[1000010]; inline int read() { int num=0,flag=1; char c=getchar(); for (;c<'0'||c>'9';c=getchar()) if (c=='-') flag=-1; for (;c>='0'&&c<='9';c=getchar()) num=(num<<3)+(num<<1)+c-48; return num*flag; } void getprime(int x) { memset(isprime,true,sizeof(isprime)); for (int i=2;i<=x;++i) if (isprime[i]) for (int j=i+i;j<=x;j+=i) isprime[j]=false; } int main() { sum=read(); a[1][1]=read();//a[1][1] getprime(1000000); for (int i1=0;i1<4;++i1)//a[5][5] { a[5][5]=d[i1]; for (int i2=0;i2<=9;++i2)//a[4][4] { a[4][4]=i2; for (int i3=0;i3<=9;++i3)//a[3][3] { a[3][3]=i3; a[2][2]=sum-a[1][1]-a[3][3]-a[4][4]-a[5][5];//a[2][2] if (a[2][2]<0) break; if (a[2][2]>9) continue; now=10000*a[1][1]+1000*a[2][2]+100*a[3][3]+10*a[4][4]+a[5][5];//左上~右下 if (!isprime[now]) continue; for (int i4=0;i4<4;++i4)//a[5][1] { a[5][1]=d[i4]; for (int i5=0;i5<4;++i5)//a[5][2] { a[5][2]=d[i5]; for (int i6=0;i6<4;++i6)//a[5][3] { a[5][3]=d[i6]; a[5][4]=sum-a[5][1]-a[5][2]-a[5][3]-a[5][5];//a[5][4] if (a[5][4]<1) break; if (a[5][4]>9) continue; now=10000*a[5][1]+1000*a[5][2]+100*a[5][3]+10*a[5][4]+a[5][5];//第五行 if (!isprime[now]) continue; for (int i7=0;i7<4;++i7)//a[1][5] { a[1][5]=d[i7]; for (int i8=0;i8<4;++i8)//a[2][5] { a[2][5]=d[i8]; for (int i9=0;i9<4;++i9)//a[3][5] { a[3][5]=d[i9]; a[4][5]=sum-a[1][5]-a[2][5]-a[3][5]-a[5][5];//a[4][5] if (a[4][5]<1) break; if (a[4][5]>9) continue; now=10000*a[1][5]+1000*a[2][5]+100*a[3][5]+10*a[4][5]+a[5][5];//第五列 if (!isprime[now]) continue; for (int i10=0;i10<=9;++i10)//a[4][2] { a[4][2]=i10; a[2][4]=sum-a[5][1]-a[4][2]-a[3][3]-a[1][5];//a[2][4] if (a[2][4]<0) break; if (a[2][4]>9) continue; now=10000*a[5][1]+1000*a[4][2]+100*a[3][3]+10*a[2][4]+a[1][5];//左下~右上 if (!isprime[now]) continue; for (int i11=1;i11<=9;++i11)//a[1][4] { a[1][4]=i11; a[3][4]=sum-a[1][4]-a[2][4]-a[4][4]-a[5][4];//a[3][4] if (a[3][4]<0) break; if (a[3][4]>9) continue; now=10000*a[1][4]+1000*a[2][4]+100*a[3][4]+10*a[4][4]+a[5][4];//第四列 if (!isprime[now]) continue; for (int i12=1;i12<=9;++i12)//a[1][3] { a[1][3]=i12; a[1][2]=sum-a[1][1]-a[1][3]-a[1][4]-a[1][5];//a[1][2] if (a[1][2]<1) break; if (a[1][2]>9) continue; now=10000*a[1][1]+1000*a[1][2]+100*a[1][3]+10*a[1][4]+a[1][5];//第一行 if (!isprime[now]) continue; a[3][2]=sum-a[1][2]-a[2][2]-a[4][2]-a[5][2];//a[3][2] if (a[3][2]>9) break; if (a[3][2]<0) continue; now=10000*a[1][2]+1000*a[2][2]+100*a[3][2]+10*a[4][2]+a[5][2];//第二列 if (!isprime[now]) continue; a[3][1]=sum-a[3][2]-a[3][3]-a[3][4]-a[3][5];//a[3][1] if (a[3][1]<1) break; if (a[3][1]>9) continue; now=10000*a[3][1]+1000*a[3][2]+100*a[3][3]+10*a[3][4]+a[3][5];//第三行 if (!isprime[now]) continue; for (int i13=1;i13<=9;++i13)//a[2][1] { a[2][1]=i13; a[2][3]=sum-a[2][1]-a[2][2]-a[2][4]-a[2][5];//a[2][3] a[4][1]=sum-a[1][1]-a[2][1]-a[3][1]-a[5][1];//a[4][1] if (a[2][3]<0||a[4][1]<1) break; if (a[2][3]>9||a[4][1]>9) continue; now1=10000*a[2][1]+1000*a[2][2]+100*a[2][3]+10*a[2][4]+a[2][5];//第二行 now2=10000*a[1][1]+1000*a[2][1]+100*a[3][1]+10*a[4][1]+a[5][1];//第一列 if (!isprime[now1]||!isprime[now2]) continue; now1=a[4][1]+a[4][2]+a[4][4]+a[4][5]; now2=a[1][3]+a[2][3]+a[3][3]+a[5][3]; if (now1!=now2) continue; a[4][3]=sum-now1;//a[4][3] if (a[4][3]>9) break; if (a[4][3]<0) continue; now1=10000*a[4][1]+1000*a[4][2]+100*a[4][3]+10*a[4][4]+a[4][5];//第四行 now2=10000*a[1][3]+1000*a[2][3]+100*a[3][3]+10*a[4][3]+a[5][3];//第三列 if (!isprime[now1]||!isprime[now2]) continue; tot++; for (int i=1;i<=5;++i) for (int j=1;j<=5;++j) ans[tot]+=a[i][j]+48; } } } } } } } } } } } } } sort(ans+1,ans+tot+1); for (int i=1;i<=tot;++i) { for (int j=0;j<25;++j) { printf("%d",ans[i][j]-48); if ((j+1)%5==0) printf("\n"); } printf("\n"); } return 0; }
又臭又长GG
不过AC的那一刹那当然还是很开心的。毕竟终极搜索a
呸 其实就差不多是个暴搜。。
相关文章推荐
- 【USACO4.3.2】素数方阵 搜索搜索!
- [BZOJ 1053][HAOI2007]反素数ant:搜索
- 机试算法讲解: 第44题 深度优先搜索之素数环问题
- [BZOJ 1053] [HAOI2007]反素数ant 数论+搜索
- 淘宝搜索排名的终极优化
- <转>Google搜索技巧终极收集
- 【搜索】单词方阵 luogu-1101
- bzoj 1053: [HAOI2007]反素数ant 搜索
- google搜索运算符+101个Google技巧 - Google技巧的终极收集
- 素数环 搜索
- NYOJ-488(搜索)-题目-----------------------------素数环
- google搜索运算符+101个Google技巧 - Google技巧的终极收集
- 【搜索】【约数个数定理】[HAOI2007]反素数ant
- 艾氏筛法搜索素数
- BZOJ 1053 [HAOI2007]反素数ant 搜索
- 素数的搜索
- HDU 2616 Kill the monster (暴力搜索 || 终极全阵列暴力)
- 文件搜索工具终极大PK挑战赛
- Google搜索技巧终极收集 - 101个Google技巧
- 【搜索】洛谷 P1101 单词方阵