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;
}