Problem F. Ironhead的推免資格(傳說)

直接AC好嗎發表於2020-12-19

北京理工大學第十五屆“連山科技”程式設計大賽-網路選拔賽The 15-th BIT Campus Programming Contest Sponsored by LSSEC - Online Round2020/11/14Problem F. Ironhead的推免資格(傳說)Input file:standard inputOutput file:standard outputTime limit:1 secondMemory limit:256 megabytesIronhead,傳說中BIT大陸的吉奧馬丘鍊銅系yyds,以絕對優勢一騎絕塵,獲得推免資格(傳說)。為了聯合每一個保研人的魔法能力,在豎炬劫溝上建立起P=NP大橋,ironhead需要知道最後一位保研人的名字。然而ironhead很忙,沒有時間來統計誰是最後一名保研人。吉奧馬丘鍊銅系的保研排名計算如下。在學習成績專業排名名次前30%(向上取整)以內的同學中,按照綜合排名從小到大逐一進行保研,直到用完保研名額。綜合排名=學習成績專業排名名次×0.85+其他表現排名名次×0.15。吉奧馬丘鍊銅系的保研名額=總人數×18.6%,之後向上取整。如果保研的最後名額中有人並列,那麼他們的綜合排名名次按姓名字典序從小到大排列。ironhead只需要知道最後一位保研人的名字,所以有同名的也沒有關係。現在請你來計算保研結果,找出最後一名保研人。Input第一行一個整數n,(1≤n≤1000),表示吉奧馬丘鍊銅系的人數。接下來n行,每行一個僅由小寫英文字母組成的姓名s,長度不超過100,和該同學的學習成績名次a和其他表現名次b,且1≤a, b≤n,可能會有並列的排名名次,保證名次合法。Page 8 of 21
北京理工大學第十五屆“連山科技”程式設計大賽-網路選拔賽The 15-th BIT Campus Programming Contest Sponsored by LSSEC - Online Round2020/11/14Output一行一個字串,為最後一位保研人的名字。Examplestandard inputstandard output1ironhead 1 1

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
struct node
{
    char name[105];
    int paiming1;
    int paiming2;
   double all;
    int flag;
} a[1005];
bool cmp(struct node x,struct node y)
{
    if(x.flag!=y.flag)
    {
        return x.flag>y.flag;
    }
    else
    {
        if(x.all!=y.all)
        {
            return x.all<y.all;
        }
        else
        {
            return strcmp(x.name,y.name)<0;
        }
    }

}
int main()
{

    int n,i;
    scanf("%d",&n);
    double p,q;
    double e=n;
    double v=e*0.3;
    int y=v;
    if(v-y!=0)
        y++;
    double k=e*0.186;
    int kk=k;
    if(k-kk!=0)
        kk++;
    int cc=0;
    for(i=0; i<n; i++)
    {
        scanf("%s",a[i].name);
        scanf("%lf%lf",&p,&q);
        a[i].paiming1=p;
        a[i].paiming2=q;
        if(a[i].paiming1<=y)
        {
            a[i].flag=1;
            cc++;
        }
        else
            a[i].flag=0;
        double sum=p*0.85+q*0.15;
        a[i].all=sum;
    }
    sort(a,a+n,cmp);
    int ans;
    if(kk>cc)
    {
        ans=cc;
    }
    else
        ans=kk;
        printf("%s",a[ans-1].name);



}

打完簽到回家睡覺

相關文章