素数方阵的工程ing

时间:2022-05-12 09:15:22

2016 12 12 16 12

开始

2016 12 13 17 30   还没开打

2017 1 3 .....

一星期前貌似打完了...

如下

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
int s[]={,,,,};
int ww[]={};
int sushu[]={};
int ans[][][];
string a[];
int top=;
int hh[]={};
int num[][]={};
int ss=;
int xx=;
int m,n;
int dfs(int h,int w,int v);
int yyyy()
{
int flag=;
for(int i=;i<=;i++)
{
flag=;
for(int u=;u*u<=i;u++)
if(i%u==){flag=;break;}
if(flag==)
{
sushu[i]=;
}
}
}
int lie (int w)
{
int sum=;
for(int i=;i<=;i++)
{
sum=sum*+num[i][w];
}
return sum;
}
int hang(int w)
{
int sum=;
for(int i=;i<=;i++)
{
sum+=sum*+num[i][w];
}
return sum;
}
void shuang(int h,int w)
{
for(int i=;i<=;i++)
{
if(i==&&w==)continue;
if(h==&&i==)continue;
hh[h]+=i;
ww[w]+=i;
if(h==w)
ss+=i;
if(h+w==)
xx+=i;
num[h][w]=i;
dfs(h,w,i);
num[h][w]=-;
hh[h]-=i;
ww[w]-=i;
if(h==w)
ss-=i;
if(h+w==)
xx-=i;
}
return ;
}
void dan(int h,int w)
{
int i=;
for(int u=;u<=;u++)
{
if(hh[h]+s[u]>n||ww[w]+s[u]>n)
{
break;
}
if(h==w&&ss+s[u]>n)
break;
if(h+w==&&xx+s[u]>n)
break;
i=s[u];
hh[h]+=i;
ww[w]+=i;
if(h==w)
ss+=i;
if(h+w==)
xx+=i;
num[h][w]=i;
dfs(h,w,num[h][w]);
hh[h]-=i;
ww[w]-=i;
num[h][w]=-;
if(h==w)
ss-=i;
if(h+w==)
xx-=i;
}
return;
}
int mj(int h,int w,char y)
{
int sum=;
if(y=='s')
{
for(int i=;i<=;i++)
{
sum=sum*+num[i][w];
}
return(sushu[sum]);
}
if(y=='h')
{
for(int i=;i<=;i++)
{
sum=sum*+num[h][i];
}
return sushu[sum];
}
if(y=='x')
{
int a=,b=;
for(int i=;i<=;i++)
{
sum=sum*+num[b][a];
a++;b--;
}
return sushu[sum];
}
if(y=='z')
{
int a=,b=;
for(int i=;i<=;i++)
{
sum=sum*+num[a][b];
a++;
b++;
}
return sushu[sum];
}
}
int sj(int h,int w,char y)
{
if(y=='s')
{
int s=n-ww[w];
if(s>=&&s<=)
{
num[h][w]=s;
return ;
}
num[h][w]=-;
return ;
}
if(y=='h')
{
int s=n-hh[h];
if(s>=&&s<=)
{
num[h][w]=s;
return ;
}
num[h][w]=-;
return ;
}
if(y=='x')
{
int s=n-xx;
if(s>=&&s<=)
{
num[h][w]=s;
return ;
}
num[h][w]=-;
return ;
}
if(y=='z')
{
int s=n-ss;
if(s>=&&s<=)
{
num[h][w]=s;
return ;
}
num[h][w]=-;
return ;
}
}
void suan(int h,int w,int i)
{
hh[h]+=i;
ww[w]+=i;
if(h==w)
ss+=i;
if(h+w==)
xx+=i;
dfs(h,w,num[h][w]);
hh[h]-=i;
ww[w]-=i;
num[h][w]=-;
if(h==w)
ss-=i;
if(h+w==)
xx-=i;
return ;
}
int dfs(int h,int w,int v)
{
if(hh[h]>n||ww[w]>n||xx>n||ss>n)
{
return ;
}
if(h==&&w==)
{
dan(,);//5,5
}
if(h==&&w==){dan(,);return ;}//(4,5);
if(h==&&w==){dan(,);return ;}//3,5;
if(h==&&w==){dan(,);return ;}//2,5;
if(h==&&w==){if(sj(,,'s')==){if(mj(,,'s')==){num[][]=-;return ;}suan(,,num[][]);return ;}}//disuan 1 5
if(h==&&w==){dan(,);return ;}//5.1;
if(h==&&w==){dan(,);return ;}//5.2;
if(h==&&w==){dan(,);return ;}//5.3;
if(h==&&w==){if(sj(,,'h')==){if(mj(,,'h')==){num[][]=-;return ;}suan(,,num[][]);}return ;}//suan 5,4;
if(h==&&w==){shuang(,);return ;}
if(h==&&w==){shuang(,);return ;}
if(h==&&w==){if(sj(,,'x')==){if(mj(,,'x')==){num[][]=-;return ;}suan(,,num[][]);}return ;}//suan 2 4;
if(h==&&w==){shuang(,);return ;}//2 2;
if(h==&&w==){if(sj(,,'z')==){if(mj(,,'z')==){num[][]=-;return ;}suan(,,num[][]);}return ;}//suan 4 4;
if(h==&&w==){shuang(,);return ;}//1 2;
if(h==&&w==){if(sj(,,'s')==){if(mj(,,'s')==){num[][]=-;return ;}suan(,,num[][]);}return ;}//suan 3 2;
if(h==&&w==){shuang(,);return ;}
if(h==&&w==){if(sj(,,'h')==){if(mj(,,'h')==){num[][]=-;return ;}suan(,,num[][]);}return ;}//suan 3,4;
if(h==&&w==){if(sj(,,'s')==){if(mj(,,'s')==){num[][]=-;return ;}suan(,,num[][]);}return ;}
if(h==&&w==){if(sj(,,'h')==){if(mj(,,'h')==){num[][]=-;return ;}suan(,,num[][]);}return ;}
if(h==&&w==){shuang(,);return ;}
if(h==&&w==){if(sj(,,'h')==){if(mj(,,'h')==){num[][]=-;return ;}suan(,,num[][]);}return ;}
if(h==&&w==){if(sj(,,'s')==){if(mj(,,'s')==){num[][]=-;return ;}suan(,,num[][]);}return ;}
if(h==&&w==)
{
int t=n-hh[];
int w=n-ww[];
if(w!=t)return ;
if(w<=&&w>=)
if(w==t)
{
num[][]=w;
if(mj(,,'s')==&&mj(,,'h')==)
{
top++;
for(int i=;i<=;i++)
{
for(int u=;u<=;u++)
ans[top][i][u]=num[i][u];
}
num[][]=;
}
}
return ;
}
return ;
}
int main()
{ yyyy();
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
memset(num,-,sizeof(num));
cin>>n>>m;
num[][]=m;
hh[]=m;
ww[]=m;
ss=m;
dfs(,,m);
for(int i=;i<=top;i++)
{
for(int u=;u<=;u++)
for(int w=;w<=;w++)
a[i]+=char(ans[i][u][w]+'');
}
sort(a+,a+top+);int w=;
for(int i=;i<=top;i++)
{
w++;
for(int w=;w<a[i].size();w++)
{
cout<<a[i][w];
if((w+)%==)cout<<endl;
}
cout<<endl;
}
return ;
}
//感觉跟lanshen比弱的一批QAQ;
药丸QAQ;