• 【PAT甲级】1012 The Best Rank (25 分)


    题意:

    输入两个整数N,M(<=2000),接着分别输入N个学生的ID,C语言成绩,数学成绩和英语成绩。

    M次询问,每次输入学生ID,如果该ID不存在则输出N/A,存在则输出该学生排名最考前的一门成绩的名次和课程编号。优先级:A>C>M>E。A代表CMD三门课的平均成绩(操作时可用总成绩来替代平均成绩处理)。

    trick:

    成绩相同时将其名次合并(多个学生并列)

    AAAAAccepted code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s[2007];
     4 int c[2007],m[2007],e[2007],a[2007];
     5 pair<int,int>cc[2007],mm[2007],ee[2007],aa[2007];
     6 int rak[2007],rak_c[2007],rak_m[2007],rak_e[2007],rak_a[2007];
     7 char ans[2007];
     8 map<string,int>mp;
     9 bool cmp(pair<int,int>a,pair<int,int>b){
    10     return a.first>b.first;
    11 }
    12 int main(){
    13     int n,q;
    14     cin>>n>>q;
    15     for(int i=1;i<=n;++i){
    16         cin>>s[i]>>c[i]>>m[i]>>e[i];
    17         a[i]=c[i]+m[i]+e[i];
    18         cc[i].first=c[i];
    19         cc[i].second=i;
    20         mm[i].first=m[i];
    21         mm[i].second=i;
    22         ee[i].first=e[i];
    23         ee[i].second=i;
    24         aa[i].first=a[i];
    25         aa[i].second=i;
    26         mp[s[i]]=i;
    27     }
    28     sort(cc+1,cc+1+n,cmp);
    29     sort(mm+1,mm+1+n,cmp);
    30     sort(ee+1,ee+1+n,cmp);
    31     sort(aa+1,aa+1+n,cmp);
    32     for(int i=1;i<=n;++i){
    33         rak_c[i]=i;
    34         if(cc[i].first==cc[i-1].first)
    35             rak_c[i]=rak_c[i-1];
    36         rak_m[i]=i;
    37         if(mm[i].first==mm[i-1].first)
    38             rak_m[i]=rak_m[i-1];
    39         rak_e[i]=i;
    40         if(ee[i].first==ee[i-1].first)
    41             rak_e[i]=rak_e[i-1];
    42         rak_a[i]=i;
    43         if(aa[i].first==aa[i-1].first)
    44             rak_a[i]=rak_a[i-1];
    45     }
    46     for(int i=1;i<=n;++i){
    47         rak[aa[i].second]=rak_a[i];
    48         ans[aa[i].second]='A';
    49     }
    50     for(int i=1;i<=n;++i)
    51         if(rak_c[i]<rak[cc[i].second]){
    52             rak[cc[i].second]=rak_c[i];
    53             ans[cc[i].second]='C';
    54         }
    55     for(int i=1;i<=n;++i)
    56         if(rak_m[i]<rak[mm[i].second]){
    57             rak[mm[i].second]=rak_m[i];
    58             ans[mm[i].second]='M';
    59         }
    60     for(int i=1;i<=n;++i)
    61         if(rak_e[i]<rak[ee[i].second]){
    62             rak[ee[i].second]=rak_e[i];
    63             ans[ee[i].second]='E';
    64         }
    65     string quy;
    66     for(int i=1;i<=q;++i){
    67         cin>>quy;
    68         if(!mp[quy])
    69             cout<<"N/A"<<"
    ";
    70         else
    71             cout<<rak[mp[quy]]<<" "<<ans[mp[quy]]<<"
    ";
    72     }
    73     return 0;
    74 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    【BZOJ4444】国旗计划
    NOIp模拟赛三十一
    [arc086e]snuke line
    NOIp模拟赛三十
    [agc004f]namori
    [agc004d]salvage robot
    [agc016b]colorful hats
    NOIp模拟赛二十九
    [arc082f]sandglass
    Oracle性能报告--ASH
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11240315.html
Copyright © 2020-2023  润新知