:CSは、学生を専攻し、私たちの最初の年のパフォーマンスを評価するために、我々は唯一の3つのコースの成績を検討C
プログラミング言語C、 - M
-数学(微積分やリニアAlgrbra)、および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は数学の第二1、英語での第3回1、および平均の最後の1ながら、Cプログラミング言語で最善を尽くしているので、その後、すべての学生のための最高ランクは1位です。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各ケースは、2つの数値を含む行で始まりN及びM学生の総数である(≤2000)、それぞれ、それらのランクをチェックする生徒の数。次に、N個のラインは、それぞれ順に、その学生の([0、100]の範囲内の)3つの整数の等級に続く6桁の文字列である学生IDが含まれ、従いC
、M
そしてE
。そして、そこにあるMのライン、学生IDを含む各が。
出力仕様:
それぞれについて、Mの学生、1行にスペースで区切って、彼/彼女のために最高のランク、および対応するランクの記号を、印刷します。
ランキング方法の優先順位は次のように命じていますA
> C
> M
> E
。したがって、最も優先順位の高い同じ最高ランク、出力1を得るために、学生のための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
考え
- 4回を通じ並べ替えるには、各クエリのタイムアウトの後ろの結果を記録するたびにソートする必要があります
- 例えば5つの個々のスコアであり、処理時間の同じ画分ことに注意:
92 92 90 85 85
対応するランクがなければなりません1 1 3 4 4
コード
#include<bits/stdc++.h>
using namespace std;
struct student
{
int id;
int score[4]; //分别记录A、C、M、E的分数
}a[2100];
int n,m;
int ranking[10000010][4] = {0}; //学号对应的,按某一类来排名的结果
int pos;
char s[4][2] = {"A", "C", "M", "E"};
bool cmp(student x, student y)
{
return x.score[pos] > y.score[pos];
}
int main()
{
cin >> n >> m;
for(int i=0;i<n;i++)
{
cin >> a[i].id;
cin >> a[i].score[1] >> a[i].score[2] >> a[i].score[3];
a[i].score[0] = (a[i].score[1] + a[i].score[2] + a[i].score[3]) / 3;
}
for(pos=0;pos<4;pos++) //4次排序
{
sort(a, a+n, cmp);
ranking[a[0].id][pos] = 1; //第一个当然是第一了
//比如5个人的得分分别是:92 92 90 85 85 ,对应的排名应该是1 1 3 4 4
for(int i=1;i<n;i++)
{
if(a[i].score[pos] == a[i-1].score[pos])
ranking[a[i].id][pos] = ranking[a[i-1].id][pos];
else
ranking[a[i].id][pos] = i + 1;
}
}
int t;
for(int i=0;i<m;i++)
{
cin >> t;
if(ranking[t][0] == 0)
cout << "N/A\n";
else
{
int k = 0;
for(int j=0;j<4;j++)
if(ranking[t][j] < ranking[t][k]) k = j;
cout << ranking[t][k] << " " << s[k] << endl;
}
}
return 0;
}
引用文
https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480