http://poj.org/problem?id=2200
简单模拟。比赛时没找到队友的错误,取余的时候没特判。应该A的。可惜那。。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; char card[5][10]; struct node { char s[10]; }st[5]; int cal(char s[]) { if(strlen(s) == 3) return 10; if(s[0] >= '2' && s[0] <= '9') return s[0]-'0'; if(s[0] == 'A') return 1; if(s[0] == 'J') return 11; if(s[0] == 'Q') return 12; if(s[0] == 'K') return 13; } int cmp(struct node t1, struct node t2) { int a1 = cal(t1.s); int a2 = cal(t2.s); if(a1 == a2) return t1.s[strlen(t1.s)-1] < t2.s[strlen(t2.s)-1]; return a1 < a2; } void solve() { int i,j; for( i = 0; i < 5; i++) { for( j = 0; j < 5; j++) { if(i != j && card[i][strlen(card[i])-1] == card[j][strlen(card[j])-1] ) { int cnt = 0; for(int k = 0; k < 5; k++) { if(k != i && k != j) strcpy(st[cnt++].s, card[k]); } sort(st,st+cnt,cmp); int a1 = cal(card[i]); int a2 = cal(card[j]); if( a1 == (a2+1)%13 || (a1 == 13&&a2 == 12) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[0].s,st[1].s,st[2].s); break; } else if(a1 == (a2+2)%13 || (a1 == 13 && a2 == 11) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[1].s,st[0].s,st[2].s); break; } else if(a1 == (a2+3)%13 || (a1 == 13 && a2 == 10) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[1].s,st[2].s,st[0].s); break; } else if(a1 == (a2+4)%13 || (a1 == 13 && a2 == 9) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[0].s,st[2].s,st[1].s); break; } else if(a1 == (a2+5)%13 || (a1 == 13 && a2 == 8) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[2].s,st[0].s,st[1].s); break; } else if(a1 == (a2+6)%13 || (a1 == 13 && a2 == 7) ) { printf("%s %s %s %s %s\n",card[i],card[j],st[2].s,st[1].s,st[0].s); break; } } } if(j < 5) break; } } int main() { int test; scanf("%d",&test); int item = 1; while(test--) { for(int i = 0; i < 5; i++) scanf("%s",card[i]); printf("Problem %d: ",item++); solve(); } return 0; }