| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
果然水~~~~~~丑陋的代码
----------------------------
#include <iostream>
#include <cstdlib>
#include <algorithm>
using namespace std;
const unsigned MAX_SIZE = 26, MAX_INF = 0x7FFFFFFF;
struct Card{
int val;
int suit;
char owner;
};
bool visited[MAX_SIZE << 1];
Card card[MAX_SIZE << 1];
char _inc[3];
int N, k, size, Epoint;
bool compare(Card &a, Card &b){
if(a.val == b.val)return a.suit < b.suit;
return a.val < b.val;
}
int toCardVal(char &cval){
switch(cval){
case '2':case '3':case '4':case '5':
case '6':case '7':case '8':case '9':return cval - '0';
case 'T': return 10;
case 'J': return 11;
case 'Q': return 12;
case 'K': return 13;
case 'A': return MAX_INF;
}
return 0;
}
int toCardSuit(char &csuit){
switch(csuit){
case 'C': return 1;
case 'D': return 2;
case 'S': return 3;
case 'H': return 4;
}
return 0;
}
int main (){
int p, q, r, t;
scanf("%d",&N);
while ( N-- ) {
scanf("%d",&k);
for (int i = 0; i < (k << 1); ++i ) {
scanf("%s",_inc);
card[i].val = toCardVal(_inc[0]);
card[i].suit = toCardSuit(_inc[1]);
if(i < k){
card[i].owner = 'A';
}else{
card[i].owner = 'E';
}
}
size = k << 1;
sort(card, card + size, compare);
r = 0;t = q = size - 1;
while ( size ) {
if(!visited[q]){
visited[q] = true;--size;
if(card[q].owner == 'E'){
p = t;
while ( p >= 0 ){
if ( !visited[p] && card[p].owner == 'A' ) {
visited[p] = true;--size;
t = p;
++Epoint;
break;
}
--p;
}
}else{
p = r;
while ( p < k << 1 ){
if ( !visited[p] && card[p].owner == 'E' ) {
visited[p] = true;--size;
r = p;
break;
}
++p;
}
}
}
--q;
}
printf("%d\n",Epoint);
memset(visited,false,sizeof(visited));Epoint = 0;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator