问题描述
输入
输出
样例输入
样例输出
#include<cstdio>
#include<cstring>
#include<stack>
#include<vector>
#include<queue>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long LL;
typedef double de;
const LL oo = 0x3f3f3f3f;
const LL maxn = 1e6+7;
const LL mod = 1e9+7;
char str[20]= {"23456789TJQKA"};
char str1[20] = {"CDSH"};
struct da
{
char s[10];
} Adam[222], You[222];
void Sort(char s1[], char s2[])///把2个字符串升序排列
{
char ss[20];
int i, ai, bi;
for(i = 0; i <= 12; i++)
{
if(s1[0] == str[i]) ai = i;
if(s2[0] == str[i]) bi = i;
}
if(ai < bi) return ;
if(ai > bi)
{
strcpy(ss, s1);
strcpy(s1, s2);
strcpy(s2, ss);
return ;
}
for(i = 0; i < 4; i++)
{
if(s1[1] == str1[i]) ai = i;
if(s2[1] == str1[i]) bi = i;
}
if(ai > bi)
{
strcpy(ss, s1);
strcpy(s1, s2);
strcpy(s2, ss);
}
return ;
}
int judge(char s1[], char s2[]) /// 返回1表示s1<s2
{
int i;
char a, b;
int ai, bi;
a = s1[0];
b = s2[0];
for(i = 0; i <= 12; i++)
{
if(str[i] == a) ai = i;
if(str[i] == b) bi = i;
}
if(ai < bi) return 1;
if(ai > bi) return 0;
a = s1[1];
b = s2[1];
ai = bi = -1;
for(i = 0; i < 4; i++)
{
if(str1[i] == a) ai = i;
if(str1[i] == b) bi = i;
}
if(ai < bi) return 1;
return 0;
}
int main()
{
int T, k, i, j, ans;
scanf("%d", &T);
while(T--)
{
ans = 0;
scanf("%d", &k);
for(i = 0; i < k; i++)
scanf("%s", Adam[i].s);
for(i = 0; i < k; i++)
scanf("%s", You[i].s);
for(i = 0; i < k-1; i++)
{
for(j = i+1; j < k; j++)
Sort(Adam[i].s, Adam[j].s);
}
for(i = 0; i < k-1; i++)
{
for(j = i+1; j < k; j++)
Sort(You[i].s, You[j].s);
}
i = j = 0;///排完序从头遍历一边就好 i,j分别指向2个人的第几张牌
while(i < k && j < k)
{
if(judge(Adam[i].s, You[j].s) == 1)
{
ans ++;
i++;
j++;
}
else j++;
}
printf("%d\n", ans);
}
return 0;
}
原文:http://www.cnblogs.com/PersistFaith/p/4948084.html