HDU 5499 SDOI

69 篇文章 0 订阅
特别坑的一道题
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=305;
int n,m;
int queue[maxm];
 char s[maxm];
struct node
{
    char name[maxm];
    char sex[maxm];
    double r1,r2;
    double z;
} t[maxm];
double cmp(node p,node q)
{
    return p.z>q.z;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        double MAXr1=-1,MAXr2=-1;
        double socre=-1;
        int w=-1,cnt=0;
        for(int i=0; i<n; i++)
        {
            scanf("%s%s%lf%lf",t[i].name,t[i].sex,&t[i].r1,&t[i].r2);
            MAXr1=max(MAXr1,t[i].r1);
            MAXr2=max(MAXr2,t[i].r2);
        }
        double y1=(300.0/MAXr1);
        double y2=(300.0/MAXr2);
        for(int i=0; i<n; i++)
        {
            t[i].z=t[i].r1*y1*0.3+t[i].r2*y2*0.7;
        }
        sort(t,t+n,cmp);
        for(int i=0; i<n; i++)
        {
           if(strcmp(t[i].sex,"female")==0)
           {
               w=i;
               queue[cnt++]=i;
               break;
           }
        }
        for(int i=0;i<n;i++)
        {
            if(i!=w)
            {
                if(cnt==m)
                {
                    break;
                }
                queue[cnt++]=i;
            }
        }
        printf("The member list of Shandong team is as follows:\n");
        for(int i=0; i<m; i++)
        {
            for(int j=i; j<m; j++)
            {
                if(t[queue[j]].z>t[queue[i]].z)
                {
                    double temp=t[queue[i]].z;
                    t[queue[i]].z=t[queue[j]].z;
                    t[queue[j]].z=temp;
                    strcpy(s,t[queue[i]].name);
                    strcpy(t[queue[i]].name,t[queue[j]].name);
                    strcpy(t[queue[j]].name,s);
                }
            }
        }
        for(int i=0; i<cnt; i++)
        {
            printf("%s\n",t[queue[i]].name);
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值