• 素数方阵的工程ing


    2016 12 12 16 12 

    开始

    2016 12 13 17 30   还没开打

    2017 1 3 .....

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

    如下

      1 #include<iostream>
      2 #include<string>
      3 #include<algorithm>
      4 #include<cstring>
      5 using namespace std;
      6 int s[10]={0,1,3,7,9};
      7 int ww[12]={};
      8 int sushu[100000]={};
      9 int ans[100000][6][6];
     10 string a[100000];
     11 int top=0;
     12 int hh[6]={};
     13 int num[9][9]={};
     14 int ss=0;
     15 int xx=0;
     16 int m,n;
     17 int dfs(int h,int w,int v);
     18 int yyyy()
     19 {
     20     int flag=0;
     21     for(int i=10000;i<=99999;i++)
     22     {
     23         flag=0;
     24         for(int u=2;u*u<=i;u++)
     25             if(i%u==0){flag=1;break;}
     26         if(flag==0)
     27         {
     28             sushu[i]=1;
     29         }
     30     }
     31 }
     32 int lie (int w)
     33 {
     34     int sum=0;
     35     for(int i=1;i<=5;i++)
     36     {
     37         sum=sum*10+num[i][w];
     38     }
     39     return sum;
     40 }
     41 int hang(int w)
     42 {
     43     int sum=0;
     44     for(int i=1;i<=5;i++)
     45     {
     46         sum+=sum*10+num[i][w];
     47     }
     48     return sum;
     49 }
     50 void shuang(int h,int w)
     51 {
     52     for(int i=0;i<=9;i++)
     53     {
     54         if(i==0&&w==1)continue;
     55         if(h==1&&i==0)continue;
     56         hh[h]+=i;
     57         ww[w]+=i;
     58         if(h==w)
     59         ss+=i;
     60         if(h+w==6)
     61         xx+=i;
     62         num[h][w]=i;
     63         dfs(h,w,i);
     64         num[h][w]=-1;
     65         hh[h]-=i;
     66         ww[w]-=i;
     67         if(h==w)
     68         ss-=i;
     69         if(h+w==6)
     70         xx-=i;
     71     }
     72     return ;
     73 }
     74 void dan(int h,int w)
     75 {
     76     int i=0;
     77     for(int u=1;u<=4;u++)
     78     {
     79         if(hh[h]+s[u]>n||ww[w]+s[u]>n)
     80         {
     81             break;
     82         }
     83         if(h==w&&ss+s[u]>n)
     84             break;
     85         if(h+w==6&&xx+s[u]>n)
     86             break;
     87         i=s[u];
     88         hh[h]+=i;
     89         ww[w]+=i;
     90         if(h==w)
     91         ss+=i;
     92         if(h+w==6)
     93         xx+=i;
     94         num[h][w]=i;
     95         dfs(h,w,num[h][w]);
     96         hh[h]-=i;
     97         ww[w]-=i;
     98         num[h][w]=-1;
     99         if(h==w)
    100         ss-=i;
    101         if(h+w==6)
    102         xx-=i;
    103     }
    104     return;
    105 }
    106 int    mj(int h,int w,char y)
    107 {
    108     int sum=0;
    109     if(y=='s')
    110     {
    111         for(int i=1;i<=5;i++)
    112         {
    113             sum=sum*10+num[i][w];
    114         }
    115         return(sushu[sum]);
    116     }
    117     if(y=='h')
    118     {
    119         for(int i=1;i<=5;i++)
    120         {
    121             sum=sum*10+num[h][i];
    122         }
    123         return sushu[sum];
    124     }
    125     if(y=='x')
    126     {
    127         int a=1,b=5;
    128         for(int i=1;i<=5;i++)
    129         {
    130             sum=sum*10+num[b][a];
    131             a++;b--;
    132         }
    133         return sushu[sum];
    134     }
    135     if(y=='z')
    136     {
    137         int a=1,b=1;
    138         for(int i=1;i<=5;i++)
    139         {
    140             sum=sum*10+num[a][b];
    141             a++;
    142             b++;
    143         }
    144         return sushu[sum];
    145     }
    146 }
    147 int sj(int h,int w,char y)
    148 {
    149     if(y=='s')
    150     {
    151         int s=n-ww[w];
    152         if(s>=0&&s<=9)
    153         {
    154             num[h][w]=s;
    155             return 1;
    156         }
    157         num[h][w]=-1;
    158         return 0;
    159     }
    160     if(y=='h')
    161     {
    162         int s=n-hh[h];
    163         if(s>=0&&s<=9)
    164         {
    165             num[h][w]=s;
    166             return 1;
    167         }
    168         num[h][w]=-1;
    169         return 0;
    170     }
    171     if(y=='x')
    172     {
    173         int s=n-xx;
    174         if(s>=0&&s<=9)
    175         {
    176             num[h][w]=s;
    177             return 1;
    178         }
    179         num[h][w]=-1;
    180         return 0;
    181     }
    182     if(y=='z')
    183     {
    184         int s=n-ss;
    185         if(s>=0&&s<=9)
    186         {
    187             num[h][w]=s;
    188             return 1;
    189         }
    190         num[h][w]=-1;
    191         return 0;
    192     }
    193 }
    194 void suan(int h,int w,int i)
    195 {
    196         hh[h]+=i;
    197         ww[w]+=i;
    198         if(h==w)
    199         ss+=i;
    200         if(h+w==6)
    201         xx+=i;
    202         dfs(h,w,num[h][w]);
    203         hh[h]-=i;
    204         ww[w]-=i;
    205         num[h][w]=-1;
    206         if(h==w)
    207         ss-=i;
    208         if(h+w==6)
    209         xx-=i;
    210         return ;
    211 }
    212 int dfs(int h,int w,int v)
    213 {
    214     if(hh[h]>n||ww[w]>n||xx>n||ss>n)
    215     {
    216         return 0;
    217     }
    218     if(h==1&&w==1)
    219     {
    220         dan(5,5);//5,5
    221     }
    222     if(h==5&&w==5){dan(4,5);return 0;}//(4,5);
    223     if(h==4&&w==5){dan(3,5);return 0;}//3,5;
    224     if(h==3&&w==5){dan(2,5);return 0;}//2,5;
    225     if(h==2&&w==5){if(sj(1,5,'s')==1){if(mj(1,5,'s')==0){num[1][5]=-1;return 0;}suan(1,5,num[1][5]);return 0;}}//disuan 1 5
    226     if(h==1&&w==5){dan(5,1);return 0;}//5.1;
    227     if(h==5&&w==1){dan(5,2);return 0;}//5.2;
    228     if(h==5&&w==2){dan(5,3);return 0;}//5.3;
    229     if(h==5&&w==3){if(sj(5,4,'h')==1){if(mj(5,4,'h')==0){num[5][4]=-1;return 0;}suan(5,4,num[5][4]);}return 0;}//suan 5,4;
    230     if(h==5&&w==4){shuang(4,2);return 0;}
    231     if(h==4&&w==2){shuang(3,3);return 0;}
    232     if(h==3&&w==3){if(sj(2,4,'x')==1){if(mj(2,4,'x')==0){num[2][4]=-1;return 0;}suan(2,4,num[2][4]);}return 0;}//suan 2 4;
    233     if(h==2&&w==4){shuang(2,2);return 0;}//2 2;
    234     if(h==2&&w==2){if(sj(4,4,'z')==1){if(mj(4,4,'z')==0){num[4][4]=-1;return 0;}suan(4,4,num[4][4]);}return 0;}//suan 4 4;
    235     if(h==4&&w==4){shuang(1,2);return 0;}//1 2;
    236     if(h==1&&w==2){if(sj(3,2,'s')==1){if(mj(3,2,'s')==0){num[3][2]=-1;return 0;}suan(3,2,num[3][2]);}return 0;}//suan 3 2;
    237     if(h==3&&w==2){shuang(3,1);return 0;}
    238     if(h==3&&w==1){if(sj(3,4,'h')==1){if(mj(3,4,'h')==0){num[3][4]=-1;return 0;}suan(3,4,num[3][4]);}return 0;}//suan 3,4;
    239     if(h==3&&w==4){if(sj(1,4,'s')==1){if(mj(1,4,'s')==0){num[1][4]=-1;return 0;}suan(1,4,num[1][4]);}return 0;}
    240     if(h==1&&w==4){if(sj(1,3,'h')==1){if(mj(1,3,'h')==0){num[1][3]=-1;return 0;}suan(1,3,num[1][3]);}return 0;}
    241     if(h==1&&w==3){shuang(2,1);return 0;}
    242     if(h==2&&w==1){if(sj(2,3,'h')==1){if(mj(2,3,'h')==0){num[2][3]=-1;return 0;}suan(2,3,num[2][3]);}return 0;}
    243     if(h==2&&w==3){if(sj(4,1,'s')==1){if(mj(4,1,'s')==0){num[4][1]=-1;return 0;}suan(4,1,num[4][1]);}return 0;}
    244     if(h==4&&w==1)
    245     {
    246         int t=n-hh[4];
    247         int w=n-ww[3];
    248         if(w!=t)return 0;
    249         if(w<=9&&w>=0)
    250         if(w==t)
    251         {
    252             num[4][3]=w;
    253             if(mj(4,3,'s')==1&&mj(4,3,'h')==1)
    254             {
    255                 top++;
    256                 for(int i=1;i<=5;i++)
    257                 {    
    258                     for(int u=1;u<=5;u++)
    259                         ans[top][i][u]=num[i][u];
    260                 }
    261                 num[4][3]=0;
    262             }
    263         }
    264         return 0;
    265     }
    266     return 0;
    267 }
    268 int main()
    269 {    yyyy();
    270     //freopen("a.in","r",stdin);
    271     //freopen("a.out","w",stdout);
    272     memset(num,-1,sizeof(num));
    273     cin>>n>>m;
    274     num[1][1]=m;
    275     hh[1]=m;
    276     ww[1]=m;
    277     ss=m;
    278     dfs(1,1,m);
    279     for(int i=1;i<=top;i++)
    280     {
    281         for(int u=1;u<=5;u++)
    282             for(int w=1;w<=5;w++)
    283                 a[i]+=char(ans[i][u][w]+'0');
    284     }
    285     sort(a+1,a+top+1);int w=0;
    286     for(int i=1;i<=top;i++)
    287     {
    288         w++;
    289         for(int w=0;w<a[i].size();w++)
    290         {
    291             cout<<a[i][w];
    292             if((w+1)%5==0)cout<<endl;
    293         }
    294         cout<<endl;
    295     }
    296     return 0;
    297 }
    //感觉跟lanshen比弱的一批QAQ;
    药丸QAQ;
  • 相关阅读:
    strcmp()比较函数和strcasecmp()和strnatcmp()
    substr()函数
    改变字符串中的字母大小写
    explode()与相反函数 implode() 和join()
    PHP nl2br() 函数
    PHP trim() 函数
    PHP的count(数组)和strlen(字符串)的内部实现
    变量处理函数库
    php中定义数组的方法
    80端口的烦恼:[3]清除NT Kernel占用80端口
  • 原文地址:https://www.cnblogs.com/Lazers/p/6164951.html
Copyright © 2020-2023  润新知