首先按照题中所给的公式,计算出每个人的分数,结构体排序,之后先输出排名前m-1个队员,如果已经输出了女队员或者没有女队员参加,那么直接输出排第m的队员即可。否则找到剩下队员中排名最好的女队员
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<set>
#define scnaf scanf
#define cahr char
#define bug puts("bugbugbug");
using namespace std;
typedef long long ll;
const int maxn=1e5+15;
struct T
{
char name[30],sex[30];
int r1,r2;
double v;
bool operator <(const T &b) const{
return v>b.v;
}
} a[105];
int main()
{
int T_T;
scnaf("%d",&T_T);
while(T_T--)
{
int n,m;
scanf("%d%d",&n,&m);
int maxr1=0,maxr2=0;
int flag=0;
for(int i=0; i<n; i++)
{
scanf("%s%s%d%d",a[i].name,a[i].sex,&a[i].r1,&a[i].r2);
maxr1=max(maxr1,a[i].r1);
maxr2=max(maxr2,a[i].r2);
if(a[i].sex[0]=='f') flag=1;
}
for(int i=0; i<n; i++)
a[i].v=0.3*a[i].r1*300/maxr1+0.7*a[i].r2*300/maxr2;
sort(a,a+n);
printf("The member list of Shandong team is as follows:\n");
for(int i=0; i<m-1; i++)
{
printf("%s\n",a[i].name);
if(a[i].sex[0]=='f') flag=0;
}
if(flag)
{
for(int i=m-1; i<n; i++)
if(a[i].sex[0]=='f')
{
printf("%s\n",a[i].name);
break;
}
}
else printf("%s\n",a[m-1].name);
}
}