poj 2200 A Card Trick(模拟)

来源:互联网 发布:网络买彩票 编辑:程序博客网 时间:2024/05/21 22:31

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


0 0