坑爹的题,居然让我写了800行代码还没过,只能重新写…………个人觉得老卡在这道题没什么意思,所以只是枚举着过了,,虽然过了,但是代码写的很烂,下面贴出代码,以作纪念.

View Code
  1 /*{
  2 ID:s42k5ek
  3 PROG:packrec
  4 LANG:C++
  5 }*/
  6 #include<stdio.h>
  7 #include<iostream>
  8 #include<string.h>
  9 using namespace std;
 10 
 11 void paixu(int first[][2],int a,int b)
 12 {
 13     int i,j;
 14     i=a;j=b;
 15     int cha1=first[a][0];
 16     int cha2=first[a][1];
 17     if(i>=j)
 18         return;
 19     while(i<j)
 20     {
 21         while(first[j][0]>=first[i][0]&&i<j)
 22             j--;
 23         if(i<j)
 24         {
 25             first[i][0]=first[j][0];
 26             first[i][1]=first[j][1];
 27             first[j][0]=cha1;
 28             first[j][1]=cha2;
 29             i++;
 30         }
 31         while(first[i][0]<=first[j][0]&&i<j)
 32             i++;
 33         if(i<j)
 34         {
 35             first[j][0]=first[i][0];
 36             first[j][1]=first[i][1];
 37             first[i][0]=cha1;
 38             first[i][1]=cha2;
 39             j--;
 40         }
 41     }
 42     paixu(first,a,i-1);
 43     paixu(first,i+1,b);
 44 }
 45 int main()
 46 {
 47     freopen ("packrec.in","r",stdin);
 48     freopen ("packrec.out","w",stdout);
 49     int ori[4][2],first[10000][2];
 50     int i,j,k,f=0,s=0,n=0,area=0,now=100000,change,arean,nowl,noww,l,a,b,c,d,m,w,w1,w2;
 51     for(i=0;i<4;i++)
 52         scanf("%d%d",&ori[i][0],&ori[i][1]);
 53     for(i=0;i<4;i++)
 54         area=area+(ori[i][0]*ori[i][1]);
 55     for(i=0;i<5;i++)
 56     {            
 57         switch(i)
 58         {
 59         case 0:
 60             {
 61                 for(a=0;a<2;a++)
 62                     for(b=0;b<2;b++)
 63                         for(c=0;c<2;c++)
 64                             for(d=0;d<2;d++)
 65                             {
 66                                 nowl=ori[0][a]+ori[1][b]+ori[2][c]+ori[3][d];
 67                                 noww=ori[0][1-a]>ori[1][1-b]?ori[0][1-a]:ori[1][1-b];
 68                                 noww=ori[2][1-c]>noww?ori[2][1-c]:noww;
 69                                 noww=ori[3][1-d]>noww?ori[3][1-d]:noww;
 70                                 arean=nowl*noww;
 71                                 if(arean>now)
 72                                     continue;
 73                                 now=arean;
 74                                 first[s][0]=nowl;
 75                                 first[s][1]=noww;
 76                                 s++;
 77                             }
 78                             break;
 79             }
 80         case 1:
 81             {
 82                 for(j=0;j<4;j++)
 83                     for(a=0;a<2;a++)
 84                         for(b=0;b<2;b++)
 85                             for(c=0;c<2;c++)
 86                                 for(d=0;d<2;d++)
 87                                 {
 88                                     switch(j)
 89                                     {
 90                                     case 0:
 91                                         {
 92                                             nowl=ori[0][a]>ori[1][b]+ori[2][c]+ori[3][d]?ori[0][a]:ori[1][b]+ori[2][c]+ori[3][d];
 93                                             noww=ori[1][1-b]>ori[2][1-c]?ori[1][1-b]:ori[2][1-c];
 94                                             noww=ori[3][1-d]>noww?ori[3][1-d]:noww;
 95                                             noww+=ori[0][1-a];
 96                                             arean=nowl*noww;
 97                                             if(arean<area)
 98                                                 continue;
 99                                             if(arean>now)
100                                                 continue;
101                                             now=arean;
102                                             first[s][0]=nowl;
103                                             first[s][1]=noww;
104                                             s++;
105                                             break;
106                                         }
107                                     case 1:
108                                         {
109                                             nowl=ori[1][b]>ori[0][a]+ori[2][c]+ori[3][d]?ori[1][b]:ori[0][a]+ori[2][c]+ori[3][d];
110                                             noww=ori[0][1-a]>ori[2][1-c]?ori[0][1-a]:ori[2][1-c];
111                                             noww=ori[3][1-d]>noww?ori[3][1-d]:noww;
112                                             noww+=ori[1][1-b];
113                                             arean=nowl*noww;
114                                             if(arean<area)
115                                                 continue;
116                                             if(arean>now)
117                                                 continue;
118                                             now=arean;
119                                             first[s][0]=nowl;
120                                             first[s][1]=noww;
121                                             s++;
122                                             break;
123                                         }
124                                     case 2:
125                                         {
126                                             nowl=ori[2][c]>ori[0][a]+ori[1][b]+ori[3][d]?ori[2][c]:ori[0][a]+ori[1][b]+ori[3][d];
127                                             noww=ori[0][1-a]>ori[1][1-b]?ori[0][1-a]:ori[1][1-b];
128                                             noww=ori[3][1-d]>noww?ori[3][1-d]:noww;
129                                             noww+=ori[2][1-c];
130                                             arean=nowl*noww;
131                                             if(arean<area)
132                                                 continue;
133                                             if(arean>now)
134                                                 continue;
135                                             now=arean;
136                                             first[s][0]=nowl;
137                                             first[s][1]=noww;
138                                             s++;
139                                             break;
140                                         }
141                                     case 3:
142                                         {
143                                             nowl=ori[3][d]>ori[1][b]+ori[2][c]+ori[0][a]?ori[3][d]:ori[1][b]+ori[2][c]+ori[0][a];
144                                             noww=ori[1][1-b]>ori[2][1-c]?ori[1][1-b]:ori[2][1-c];
145                                             noww=ori[0][1-a]>noww?ori[0][1-a]:noww;
146                                             noww+=ori[3][1-d];
147                                             arean=nowl*noww;
148                                             if(arean<area)
149                                                 continue;
150                                             if(arean>now)
151                                                 continue;
152                                             now=arean;
153                                             first[s][0]=nowl;
154                                             first[s][1]=noww;
155                                             s++;
156                                             break;
157                                         }
158                                     }
159                             }                                
160             break;
161             }            
162         case 2:
163             {                
164                 for(j=0;j<4;j++)
165                     for(k=0;k<4;k++)
166                         for(l=0;l<4;l++)
167                             for(m=l+1;m<4;m++)
168                                 for(a=0;a<2;a++)
169                                     for(b=0;b<2;b++)
170                                         for(c=0;c<2;c++)
171                                             for(d=0;d<2;d++)
172                                             {                                            
173                                                 if(k==j||l==j||l==k||m==j||m==k)
174                                                     continue;
175                                                 nowl=ori[m][d]>ori[l][c]?ori[m][d]:ori[l][c];
176                                                 nowl=ori[k][b]+nowl>ori[j][a]?ori[k][b]+nowl:ori[j][a];
177                                                 noww=ori[m][1-d]+ori[l][1-c]>ori[k][1-b]?ori[m][1-d]+ori[l][1-c]:ori[k][1-b];
178                                                 noww+=ori[j][1-a];
179                                                 arean=nowl*noww;
180                                                 if(arean<area)
181                                                     continue;
182                                                 if(arean>now)
183                                                     continue;
184                                                 now=arean;
185                                                 first[s][0]=nowl;
186                                                 first[s][1]=noww;
187                                                 s++;
188                                             }                                            
189                 break;
190             }
191         case 3:
192             {
193                 for(j=0;j<4;j++)
194                     for(k=0;k<4;k++)
195                         for(l=0;l<4;l++)
196                             for(m=l+1;m<4;m++)
197                                 for(a=0;a<2;a++)
198                                     for(b=0;b<2;b++)
199                                         for(c=0;c<2;c++)
200                                             for(d=0;d<2;d++)
201                                             {
202                                                 if(k==j||l==j||l==k||m==j||m==k||m==l)
203                                                     continue;
204                                                 nowl=ori[l][c]>ori[m][d]?ori[l][c]:ori[m][d];
205                                                 nowl=nowl>ori[j][a]+ori[k][b]?nowl:ori[j][a]+ori[k][b];
206                                                 noww=ori[j][1-a]>ori[k][1-b]?ori[j][1-a]:ori[k][1-b];
207                                                 noww+=(ori[l][1-c]+ori[m][1-d]);
208                                                 arean=nowl*noww;
209                                                 if(arean<area)
210                                                     continue;
211                                                 if(arean>now)
212                                                     continue;
213                                                 now=arean;
214                                                 first[s][0]=nowl;
215                                                 first[s][1]=noww;
216                                                 s++;
217                                             }
218                 break;
219             }
220         case 4:
221             {                
222                 for(j=0;j<4;j++)
223                     for(k=0;k<4;k++)
224                         for(l=0;l<4;l++)
225                             for(m=0;m<4;m++)
226                                 for(a=0;a<2;a++)
227                                     for(b=0;b<2;b++)
228                                         for(c=0;c<2;c++)
229                                             for(d=0;d<2;d++)
230                                             {
231                                                 if(k==j||l==j||l==k||m==j||m==k||m==l)
232                                                     continue;
233                                                 nowl=ori[j][a]+ori[k][b]>ori[l][c]+ori[m][d]?ori[j][a]+ori[k][b]:ori[l][c]+ori[m][d];
234                                                 if(nowl==ori[j][a]+ori[k][b])
235                                                 {
236                                                     f=ori[j][1-a]>ori[k][1-b]?ori[k][b]:ori[j][a];
237                                                     noww=ori[l][c]>ori[m][d]?ori[m][d]:ori[l][c];
238                                                     w=ori[l][c]>ori[m][d]?ori[m][1-d]:ori[l][1-c];
239                                                     n=ori[j][1-a]>ori[k][1-b]?ori[k][1-b]:ori[j][1-a];
240                                                     w1=ori[j][1-a]>ori[k][1-b]?ori[j][1-a]:ori[k][1-b];
241                                                     w2=ori[l][c]>ori[m][d]?ori[l][1-c]:ori[m][1-d];
242                                                     if(noww<=f)
243                                                         noww=n+w>w1+w2?n+w:w1+w2;
244                                                     else
245                                                     {
246                                                         f=w>w2?w:w2;
247                                                         noww=w1+f;
248                                                     }    
249                                                 }
250                                                 else
251                                                 {
252                                                     f=ori[l][1-c]>ori[m][1-d]?ori[m][d]:ori[l][c];
253                                                     noww=ori[j][a]>ori[k][b]?ori[k][b]:ori[j][a];
254                                                     w=ori[j][a]>ori[k][b]?ori[k][1-b]:ori[j][1-a];
255                                                     n=ori[l][1-c]>ori[m][1-d]?ori[m][1-d]:ori[l][1-c];
256                                                     w1=ori[l][1-c]>ori[m][1-d]?ori[l][1-c]:ori[m][1-d];
257                                                     w2=ori[j][a]>ori[k][b]?ori[j][1-a]:ori[k][1-b];
258                                                     if(noww<=f)
259                                                         noww=n+w>w1+w2?n+w:w1+w2;
260                                                     else
261                                                     {
262                                                         f=w>w2?w:w2;
263                                                         noww=w1+f;
264                                                     }    
265                                                 }
266                                                 arean=nowl*noww;
267                                                 if(arean<area)
268                                                     continue;
269                                                 if(arean>now)
270                                                     continue;
271                                                 now=arean;
272                                                 first[s][0]=nowl;
273                                                 first[s][1]=noww;
274                                                 s++;
275                                             }
276                 break;
277             }
278             }
279             }
280         for(i=0;i<s;i++)
281             if(first[i][0]>first[i][1])
282             {
283                 change=first[i][0];
284                 first[i][0]=first[i][1];
285                 first[i][1]=change;
286             }
287             paixu(first,0,s-1);
288             printf("%d\n",now);
289             i=0;
290             while(i<s)
291             {
292                 if(first[i][0]*first[i][1]==now)
293                 {
294                     printf("%d %d\n",first[i][0],first[i][1]);
295                     i++;
296                     while(i<s&&first[i][0]==first[i-1][0])
297                         i++;
298                 }
299                 else
300                     i++;
301             }
302             return 0;
303 }

 

posted on 2012-07-13 17:17  醉春雨  阅读(163)  评论(0)    收藏  举报