坑爹的题,居然让我写了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 }

浙公网安备 33010602011771号