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("\ncnt=%d\n",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("\n");

454     }

455     return 0;

456 }
View Code

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

 

你可能感兴趣的:(poj)