1 获奖(分数 10)

在某次竞赛中,判题规则是按解题数从多到少排序,在解题数相同的情况下,按总成绩(保证各不相同)从高到低排序,取排名前60%的参赛队(四舍五入取整)获奖,请确定某个队能否获奖。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试的第一行输入1个整数n(1≤n≤15)和1个字符串ms(长度小于10且不含空格),分别表示参赛队伍总数和想确定是否能获奖的某个队名;接下来的n行输入n个队的解题信息,每行一个1个字符串s(长度小于10且不含空格)和2个整数m,g(0≤m≤10,0≤g≤100),分别表示一个队的队名、解题数、成绩。当然,n个队名中肯定包含ms。

输出格式:

对于每组测试,若某队能获奖,则输出“YES”,否则输出“NO”。引号不必输出。

输入样例:

1
3 team001
team001 2 27
team002 2 28
team003 0 7

输出样例:

YES

问题分析

结构体排序,先按解题从大到小,再按成绩从大到小(注这次排序只发生在解题数目相同的队伍之间)

代码实现

#include<stdio.h>
#include<string.h>
struct team{
    char name[11];
    int jieti;
    int chengji;
};
int main(){
    int t;
    scanf("%d",&t);
    getchar();
    for(int i=0;i<t;i++){
        int n;
        char ms[11];
        struct team t[100];
        scanf("%d %s",&n,ms);
        getchar();//getchar用来将多余的回车键清除
        for(int j=0;j<n;j++){
            scanf("%s %d %d",t[j].name,&t[j].jieti,&t[j].chengji);
            getchar();
        }
        for(int j=0;j<n-1;j++){
            for(int k=j+1;k<n;k++){
                if(t[j].jieti<t[k].jieti){//按解题数目从大到小排序
                    struct team temp=t[j];
                    t[j]=t[k];
                    t[k]=temp;
                }
            }
        }
        for(int j=0;j<n-1;j++){
            for(int k=j+1;k<n;k++){
                if(t[j].jieti==t[k].jieti&&t[j].chengji<t[k].chengji){//解题数目相同按成绩从大到小排序
                    struct team temp=t[j];
                    t[j]=t[k];
                    t[k]=temp;
                }
            }
        }
        int flag=1;//标记是否能获奖
        int h;
        double ll=(double)n*0.6;//留下前60%的队伍
        if(ll-(int)ll>=0.5){//进行四舍五入
            h=(int)ll+1;
        }else{
            h=(int)ll;
        }
        for(int j=0;j<h;j++){//在前60%中如果能找到目标队伍,则能够获奖
            if(strcmp(t[j].name,ms)==0){
                printf("YES\n");
                flag=0;
            }
        }
        if(flag){
        	printf("NO\n");
		}
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值