比赛 |
至少完成十道练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
素数方阵 |
最终得分 |
100 |
用户昵称 |
Mealy |
运行时间 |
3.941 s |
代码语言 |
C++ |
内存使用 |
4.61 MiB |
提交时间 |
2017-05-22 19:19:41 |
显示代码纯文本
//890
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int nmax=100010;
int N,M;
//Trie
int ch[nmax][10]={0};
int val[nmax]={0};
int tot;
int num[6]={0};
void Init(){
memset(ch,0,sizeof(ch));
memset(val,0,sizeof(val));
tot=0;
}
void Idx(int x){
int i=4;
memset(num,0,sizeof(num));
while(x){
num[i]=x%10;
x/=10;
i--;
}
}
void Insert(int x){
Idx(x);
int t=0;
int c=0;
for(int i=0;i<5;i++){
c=num[i];
if(!ch[t][c]){
tot++;
ch[t][c]=tot;
val[tot]=c;
}
t=ch[t][c];
}
}
//END
bool P[nmax]={0};
bool Judge(int x){
int sum=0;
while(x){
sum+=x%10;
x/=10;
}
if(sum==N){
return 1;
}
return 0;
}
void EulerGetPrime(){
int r=100000;
int l=10000;
for(int i=2;i<=sqrt(r);i++){
if(P[i]){
continue;
}
for(int j=i*i;j<=r;j+=i){
P[j]=1;
}
}
for(int i=l;i<=r;i++){
if(Judge(i)&&!P[i]){
// printf("%d\n",i);
Insert(i);
}
}
}
int res[6][6]={0};
int r[6][6]={0};
int c[6][6]={0};
int m[6]={0};
int s[6]={0};
inline bool Check(int i,int j,int x){
if(!ch[r[i-1][j]][x]){
return 0;
}
else{
r[i][j]=ch[r[i-1][j]][x];
}
if(!ch[c[i][j-1]][x]){
return 0;
}
else{
c[i][j]=ch[c[i][j-1]][x];
}
if(i==j){
if(!ch[m[i-1]][x]){
return 0;
}
else{
m[i]=ch[m[i-1]][x];
}
}
if(i+j==6){
if(!ch[s[j-1]][x]&&(j!=1)){
return 0;
}
else{
s[j]=ch[s[j-1]][x];
}
}
return 1;
}
vector<string> ans;
void DFS(int x,int y){
int newx,newy;
newx=x;newy=y;
newx++;
if(newx==6){
newx=1;
newy++;
}
if(y==6){
string tmp;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
tmp+=res[i][j]+'0';
}
tmp+="\n";
}
ans.push_back(tmp);
return ;
}
for(int i=0;i<=9;i++){
res[x][y]=i;
if(Check(x,y,i)){
DFS(newx,newy);
}
}
return ;
}
void Col(){
scanf("%d%d",&N,&M);
Init();
EulerGetPrime();
res[1][1]=M;
r[1][1]=ch[0][M];
c[1][1]=ch[0][M];
m[1]=ch[0][M];
DFS(2,1);
sort(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++){
cout<<ans[i]<<endl;
}
}
int main(){
freopen("prime3.in","r",stdin);
freopen("prime3.out","w",stdout);
Col();
return 0;
}