简单。
手动的实现全排列
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 24; 7 8 struct node{ 9 char a,b,aa; 10 int c,d,val; 11 }p[ 5 ],temp; 12 13 struct node2{ 14 node tt[5]; 15 int most; 16 }ans[ 122 ]; 17 18 int cmp( node a,node b ){ 19 return a.val<b.val; 20 } 21 22 int cmp2( node2 a,node2 b ){ 23 return a.most<b.most; 24 } 25 26 int cnt; 27 28 int value( char ch ){ 29 if( ch=='C' ) return 1; 30 else if( ch=='D' ) return 2; 31 else if( ch=='H' ) return 3; 32 else if( ch=='S' ) return 4; 33 if( ch=='A' ) return 1; 34 else if( ch>='2'&&ch<='9' ) return (ch-'0'); 35 else if( ch=='J' ) return 11; 36 else if( ch=='Q' ) return 12; 37 else if( ch=='K' ) return 13; 38 } 39 40 bool judge(){ 41 if( p[0].b!=p[1].b ) return false; 42 43 44 if( p[2].val<=p[3].val&&p[2].val<=p[4].val ){ 45 if( p[3].val>=p[4].val ) {//pos = 4 46 if( p[1].aa!='#' ){//10 47 if(p[0].a=='A' ) return true; 48 else return false; 49 } 50 else if( p[1].a=='A' ) {//1 51 if( p[0].a=='5' ) return true; 52 else return false; 53 } 54 else if( p[1].a=='2' ){//2 55 if( p[0].a=='6' ) return true; 56 else return false; 57 } 58 else if( p[1].a=='3' ){//3 59 if( p[0].a=='7' ) return true; 60 else return false; 61 } 62 else if( p[1].a=='4' ){//4 63 if( p[0].a=='8' ) return true; 64 else return false; 65 } 66 else if( p[1].a=='5' ){//5 67 if( p[0].a=='9' ) return true; 68 else return false; 69 } 70 else if( p[1].a=='6' ){//6 71 if( p[0].a=='1' ) return true; 72 else return false; 73 } 74 else if( p[1].a=='7' ){//7 75 if( p[0].a=='J' ) return true; 76 else return false; 77 } 78 else if( p[1].a=='8' ){//8 79 if( p[0].a=='Q' ) return true; 80 else return false; 81 } 82 else if( p[1].a=='9' ){//9 83 if( p[0].a=='K' ) return true; 84 else return false; 85 } 86 else if( p[1].a=='J' ){//J 87 if( p[0].a=='2' ) return true; 88 else return false; 89 } 90 else if( p[1].a=='Q' ){//Q 91 if( p[0].a=='3' ) return true; 92 else return false; 93 } 94 else if( p[1].a=='K' ){//K 95 if( p[0].a=='4' ) return true; 96 else return false; 97 } 98 } 99 else {//pos = 1 100 if( p[1].aa!='#' ){//10 101 if(p[0].a=='J' ) return true; 102 else return false; 103 } 104 else if( p[1].a=='A' ) {//1 105 if( p[0].a=='2' ) return true; 106 else return false; 107 } 108 else if( p[1].a=='2' ){//2 109 if( p[0].a=='3' ) return true; 110 else return false; 111 } 112 else if( p[1].a=='3' ){//3 113 if( p[0].a=='4' ) return true; 114 else return false; 115 } 116 else if( p[1].a=='4' ){//4 117 if( p[0].a=='5' ) return true; 118 else return false; 119 } 120 else if( p[1].a=='5' ){//5 121 if( p[0].a=='6' ) return true; 122 else return false; 123 } 124 else if( p[1].a=='6' ){//6 125 if( p[0].a=='7' ) return true; 126 else return false; 127 } 128 else if( p[1].a=='7' ){//7 129 if( p[0].a=='8' ) return true; 130 else return false; 131 } 132 else if( p[1].a=='8' ){//8 133 if( p[0].a=='9' ) return true; 134 else return false; 135 } 136 else if( p[1].a=='9' ){//9 137 if( p[0].a=='1' ) return true; 138 else return false; 139 } 140 else if( p[1].a=='J' ){//J 141 if( p[0].a=='Q' ) return true; 142 else return false; 143 } 144 else if( p[1].a=='Q' ){//Q 145 if( p[0].a=='K' ) return true; 146 else return false; 147 } 148 else if( p[1].a=='K' ){//K 149 if( p[0].a=='A' ) return true; 150 else return false; 151 } 152 } 153 } 154 155 156 if( p[4].val<=p[3].val&&p[4].val<=p[2].val ){ 157 if( p[2].val>=p[3].val ) {//pos = 6 158 if( p[1].aa!='#' ){//10 159 if(p[0].a=='3' ) return true; 160 else return false; 161 } 162 else if( p[1].a=='A' ) {//1 163 if( p[0].a=='7' ) return true; 164 else return false; 165 } 166 else if( p[1].a=='2' ){//2 167 if( p[0].a=='8' ) return true; 168 else return false; 169 } 170 else if( p[1].a=='3' ){//3 171 if( p[0].a=='9' ) return true; 172 else return false; 173 } 174 else if( p[1].a=='4' ){//4 175 if( p[0].a=='1' ) return true; 176 else return false; 177 } 178 else if( p[1].a=='5' ){//5 179 if( p[0].a=='J' ) return true; 180 else return false; 181 } 182 else if( p[1].a=='6' ){//6 183 if( p[0].a=='Q' ) return true; 184 else return false; 185 } 186 else if( p[1].a=='7' ){//7 187 if( p[0].a=='K' ) return true; 188 else return false; 189 } 190 else if( p[1].a=='8' ){//8 191 if( p[0].a=='A' ) return true; 192 else return false; 193 } 194 else if( p[1].a=='9' ){//9 195 if( p[0].a=='2' ) return true; 196 else return false; 197 } 198 else if( p[1].a=='J' ){//J 199 if( p[0].a=='4' ) return true; 200 else return false; 201 } 202 else if( p[1].a=='Q' ){//Q 203 if( p[0].a=='5' ) return true; 204 else return false; 205 } 206 else if( p[1].a=='K' ){//K 207 if( p[0].a=='6' ) return true; 208 else return false; 209 } 210 } 211 else {//pos = 3 212 if( p[1].aa!='#' ){//10 213 if(p[0].a=='K' ) return true; 214 else return false; 215 } 216 else if( p[1].a=='A' ) {//1 217 if( p[0].a=='4' ) return true; 218 else return false; 219 } 220 else if( p[1].a=='2' ){//2 221 if( p[0].a=='5' ) return true; 222 else return false; 223 } 224 else if( p[1].a=='3' ){//3 225 if( p[0].a=='6' ) return true; 226 else return false; 227 } 228 else if( p[1].a=='4' ){//4 229 if( p[0].a=='7' ) return true; 230 else return false; 231 } 232 else if( p[1].a=='5' ){//5 233 if( p[0].a=='8' ) return true; 234 else return false; 235 } 236 else if( p[1].a=='6' ){//6 237 if( p[0].a=='9' ) return true; 238 else return false; 239 } 240 else if( p[1].a=='7' ){//7 241 if( p[0].a=='1' ) return true; 242 else return false; 243 } 244 else if( p[1].a=='8' ){//8 245 if( p[0].a=='J' ) return true; 246 else return false; 247 } 248 else if( p[1].a=='9' ){//9 249 if( p[0].a=='Q' ) return true; 250 else return false; 251 } 252 else if( p[1].a=='J' ){//J 253 if( p[0].a=='A' ) return true; 254 else return false; 255 } 256 else if( p[1].a=='Q' ){//Q 257 if( p[0].a=='2' ) return true; 258 else return false; 259 } 260 else if( p[1].a=='K' ){//K 261 if( p[0].a=='3' ) return true; 262 else return false; 263 } 264 } 265 } 266 267 268 if( p[3].val<=p[2].val&&p[3].val<=p[4].val ){ 269 if( p[2].val>=p[4].val ) {//pos = 5 270 if( p[1].aa!='#' ){//10 271 if(p[0].a=='2' ) return true; 272 else return false; 273 } 274 else if( p[1].a=='A' ) {//1 275 if( p[0].a=='6' ) return true; 276 else return false; 277 } 278 else if( p[1].a=='2' ){//2 279 if( p[0].a=='7' ) return true; 280 else return false; 281 } 282 else if( p[1].a=='3' ){//3 283 if( p[0].a=='8' ) return true; 284 else return false; 285 } 286 else if( p[1].a=='4' ){//4 287 if( p[0].a=='9' ) return true; 288 else return false; 289 } 290 else if( p[1].a=='5' ){//5 291 if( p[0].a=='1' ) return true; 292 else return false; 293 } 294 else if( p[1].a=='6' ){//6 295 if( p[0].a=='J' ) return true; 296 else return false; 297 } 298 else if( p[1].a=='7' ){//7 299 if( p[0].a=='Q' ) return true; 300 else return false; 301 } 302 else if( p[1].a=='8' ){//8 303 if( p[0].a=='K' ) return true; 304 else return false; 305 } 306 else if( p[1].a=='9' ){//9 307 if( p[0].a=='A' ) return true; 308 else return false; 309 } 310 else if( p[1].a=='J' ){//J 311 if( p[0].a=='3' ) return true; 312 else return false; 313 } 314 else if( p[1].a=='Q' ){//Q 315 if( p[0].a=='4' ) return true; 316 else return false; 317 } 318 else if( p[1].a=='K' ){//K 319 if( p[0].a=='5' ) return true; 320 else return false; 321 } 322 } 323 else {//pos = 2 324 if( p[1].aa!='#' ){//10 325 if(p[0].a=='Q' ) return true; 326 else return false; 327 } 328 else if( p[1].a=='A' ) {//1 329 if( p[0].a=='3' ) return true; 330 else return false; 331 } 332 else if( p[1].a=='2' ){//2 333 if( p[0].a=='4' ) return true; 334 else return false; 335 } 336 else if( p[1].a=='3' ){//3 337 if( p[0].a=='5' ) return true; 338 else return false; 339 } 340 else if( p[1].a=='4' ){//4 341 if( p[0].a=='6' ) return true; 342 else return false; 343 } 344 else if( p[1].a=='5' ){//5 345 if( p[0].a=='7' ) return true; 346 else return false; 347 } 348 else if( p[1].a=='6' ){//6 349 if( p[0].a=='8' ) return true; 350 else return false; 351 } 352 else if( p[1].a=='7' ){//7 353 if( p[0].a=='9' ) return true; 354 else return false; 355 } 356 else if( p[1].a=='8' ){//8 357 if( p[0].a=='1' ) return true; 358 else return false; 359 } 360 else if( p[1].a=='9' ){//9 361 if( p[0].a=='J' ) return true; 362 else return false; 363 } 364 else if( p[1].a=='J' ){//J 365 if( p[0].a=='K' ) return true; 366 else return false; 367 } 368 else if( p[1].a=='Q' ){//Q 369 if( p[0].a=='A' ) return true; 370 else return false; 371 } 372 else if( p[1].a=='K' ){//K 373 if( p[0].a=='2' ) return true; 374 else return false; 375 } 376 } 377 } 378 } 379 380 void solve( int l,int r ){ 381 if( l>r&&cnt==0 ){ 382 if( judge()==true ) { 383 ans[ cnt ].tt[0] = p[0]; 384 ans[ cnt ].tt[1] = p[1]; 385 ans[ cnt ].tt[2] = p[2]; 386 ans[ cnt ].tt[3] = p[3]; 387 ans[ cnt ].tt[4] = p[4]; 388 ans[ cnt ].most = p[0].val+10*p[1].val+100*p[2].val+1000*p[3].val+10000*p[4].val; 389 cnt++; 390 } 391 return ; 392 } 393 for( int i=l;i<=r&&cnt==0;i++ ){ 394 temp = p[i]; 395 p[i] = p[l]; 396 p[l] = temp; 397 solve( l+1,r ); 398 if( cnt>0 ) return ; 399 temp = p[i]; 400 p[i] = p[l]; 401 p[l] = temp; 402 } 403 } 404 405 int main(){ 406 int ca = 1; 407 int T; 408 scanf("%d",&T); 409 while( T-- ){ 410 printf("Problem %d: ",ca++); 411 char s[ 4 ]; 412 cnt = 0; 413 for( int i=0;i<5;i++ ){ 414 scanf("%s",s); 415 if( strlen(s)==3 ) { 416 p[i].a = '1'; 417 p[i].aa = '0'; 418 p[i].b = s[2]; 419 p[i].c = 10; 420 p[i].d = value( s[2] ); 421 p[i].val = 10*p[i].c+p[i].d; 422 } 423 else { 424 p[i].a = s[0]; 425 p[i].b = s[1]; 426 p[i].aa = '#'; 427 p[i].c = value(s[0]); 428 p[i].d = value(s[1]); 429 p[i].val = 10*p[i].c+p[i].d; 430 } 431 } 432 sort( p,p+5,cmp ); 433 solve( 0,4 ); 434 /* 435 sort( ans,ans+cnt,cmp2 ); 436 p[0] = ans[0].tt[0]; 437 p[1] = ans[0].tt[1]; 438 p[2] = ans[0].tt[2]; 439 p[3] = ans[0].tt[3]; 440 p[4] = ans[0].tt[4]; 441 */ 442 //printf(" cnt=%d ",cnt); 443 for( int i=0;i<5;i++ ){ 444 if(i==0) { 445 if( p[i].aa=='#' ) printf("%c%c",p[i].a,p[i].b); 446 else printf("10%c",p[i].b); 447 } 448 else{ 449 if( p[i].aa=='#' ) printf(" %c%c",p[i].a,p[i].b); 450 else printf(" 10%c",p[i].b); 451 } 452 } 453 printf(" "); 454 } 455 return 0; 456 }
代码有点长。。有点啰嗦。。