PTAザベストランク(25分)

無限の光を放つのは人間の心であり、無限の闇を生み出すのも人間の心であり、光と闇が絡み合って戦うこの世界は、懐かしくて無力な世界です。

初年度のCS専攻学生の成績を評価するために、3つのコースの成績のみを考慮します。  C -Cプログラミング言語、  M -数学(微積分または線形代数)、および  E -英語。それまでの間、私たちは生徒たちに最高のランクを強調することを奨励します。つまり、3つのコースと平均点に関して4つのランクの中で、生徒ごとに最高のランクを印刷します。

例えば、の等級  C、  M、  E および  A - 4人の平均は以下のように与えられます。

StudentID  C  M  E  A
310101     98 85 88 90
310102     70 95 88 84
310103     82 87 94 88
310104     91 91 91 91

1人目はCプログラミング言語で最高の成績を出し、2人目は数学、3人目は英語、そして最後の人は平均して、すべての学生にとって最高のランクは1位です。

入力仕様:

各入力ファイルには1つのテストケースが含まれています。各ケースは、NとM(≤2000)の2つの数値を含む行で始まります。NとM(≤2000)は、それぞれ学生の総数と、ランクをチェックする学生の数です。次いで、N行はそれぞれの順にその学生の([0、100]の範囲内の)3つの整数の等級に続く6桁の文字列である学生IDが含まれ、従い  C、  M そして  E次に、M行があり、それぞれに学生IDが含まれています。

出力仕様:

Mの生徒それぞれについて、彼/彼女の最高のランクと、対応するランクのシンボルを1行にスペースで区切って印刷します。

ランキング方法の優先順位は次のように命じています  A >  C >  M >  Eしたがって、生徒が同じ最高ランクを取得する方法が2つ以上ある場合は、優先度が最も高い方法を出力します。

学生が採点リストにない場合は、単に出力します  N/A

入力例:

5 6
310101 98 85 88
310102 70 95 88
310103 82 87 94
310104 91 91 91
310105 85 90 90
310101
310102
310103
310104
310105
999999

出力例:

1 C
1 M
1 E
1 A
3 A
N/A
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=2e3+10;
struct node {
    int id;
    int fs[4];
}a[maxn];
int jc[10000000][4];
int n,m,ct;
char c[4]={'A','C','M','E'};
bool comp(node x,node y)
{
    return x.fs[ct]>y.fs[ct];
}
int main()
{
    scanf("%d%d", &n, &m);
    for(int i=0; i<n; i++)
    {
        scanf("%d%d%d%d", &a[i].id, &a[i].fs[1], &a[i].fs[2], &a[i].fs[3]);
        a[i].fs[0]=a[i].fs[1]+a[i].fs[2]+a[i].fs[3];
        for(int j=0; j<4; j++)
            jc[a[i].id][j]=n+1;
    }
    for(ct=0;ct<4;ct++)
    {
        sort(a, a+n, comp);
        jc[a[0].id][ct]=1;
        for (int i=1; i<n; i++)
        {
            if(a[i].fs[ct]==a[i-1].fs[ct])
                jc[a[i].id][ct]=jc[a[i-1].id][ct];
            else
                jc[a[i].id][ct]=i+1;
        }
    }
    while(m--)
    {
        int x;
        scanf("%d", &x);
        if (jc[x][0]!=0)
        {
            int k=0;
            for (int i=0; i<4; i++)
            {
                if (jc[x][i]<jc[x][k])
                    k = i;
            }
            printf("%d %c\n", jc[x][k], c[k]);
        }
        else
            printf("N/A\n");
    }
    return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_44170305/article/details/108571569