7-41 PATランキング概要(25点)
能力試験オンライン試験を通じて(能力試験のプログラミングは、PATと呼ばれる)プログラミングコンピュータは、裁判官と自動評価方法の統一組織客観的アルゴリズムの設計及びプログラム設計と候補者の実施能力、科学とコンピュータプログラミングの才能の評価、企業のための人材の選択に設計されています参照標準を提供
各試験は、いくつかの異なるテストサイトで同時に開催されます、LANで各テストサイトでは、このテストサイトは、結果を生成します。試験後、各試験センターの結果が瞬時全体のリーグ表に集約されます。
今、自動的に各テストサイトの結果をマージし、全体的なランキング表を生成するプログラムを書くように頼みます。
入力フォーマット:
入力の最初の行は試験部位の合計数を表す正の整数N(≤100)を与えます。形式で次に指定されたN個のテストサイトの結果は:;によって与えられた情報の候補の次にK行、候補番号を含む(最初の行は、正の整数K(≤300)、試験部位を表す候補の総数が与えられますスペースで区切られた13個の整数)とスコアリング(間隔で[0100]整数)。
出力フォーマット:
最初の行の最初の出力における候補の総数。その後、出力順にランキング表の要約、各候補者のための情報の1行:試験番号、試験部位での最終順位、試験センターの数、ランク。入力テストサイトを1からNまで番号付けされた順序で与えられます 非候補の出力は、出力候補番号の昇順によると、候補者が同じで、同じスコアをランク付けする必要があります取得し、最終的な出力の降順でランク付けされなければなりません。
サンプル入力:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
出力例:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
あなたが最初のランクのそれぞれを維持するために、診察室に入るとき、そして最終的にすべて入力した後、一度全体的な統計にランク:思考を締結。注再配布プロセス条件。
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
#define MAXN 30010
typedef struct Stu{
string id;
int score;
int allRank;
int placeRank;
int placeId;
};
Stu stu[MAXN];
bool cmp(Stu a,Stu b)
{
if (a.score!=b.score)
return a.score>b.score;
else
return a.id<b.id;
}
int main()
{
int n;
cin>>n;
int num = 0;
int k;
for(int i = 0;i<n;i++)
{
cin>>k;
for(int j = num;j<num+k;j++)
{
cin >> stu[j].id >> stu[j].score;
stu[j].placeId = i+1;
}
sort(stu+num,stu+num+k,cmp); //处理每一个考场的排名问题
int level = 1;
for(int j = num;j<num+k;j++) //注意考虑重分的人
{
if(j==num)
stu[j].placeRank = level;
else
{
if(stu[j].score==stu[j-1].score)
stu[j].placeRank = stu[j-1].placeRank;
else stu[j].placeRank = level;
}
level++;
}
num+=k; //注意num要加k
}
sort(stu,stu+num,cmp);
int level = 1;
for(int j = 0;j<num;j++) //注意考虑重分的人
{
if(j==0)
stu[j].allRank = level;
else
{
if(stu[j].score==stu[j-1].score)
stu[j].allRank = stu[j-1].allRank;
else stu[j].allRank = level;
}
level++;
}
cout<<num<<endl;
for(int i = 0;i<num;i++)
{
cout<<stu[i].id<<" "<<stu[i].allRank<<" "<<stu[i].placeId<<" "<<stu[i].placeRank<<endl;
}
return 0;
}