POJ2200+全排列模拟

简单。

手动的实现全排列

  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 }
View Code

代码有点长。。有点啰嗦。。

keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/3188237.html