計算機程序設計能力考試(Programming Ability Test,簡稱PAT)旨在通過統一組織的在線考試及自動評測方法客觀地評判考生的算法設計與程序設計實現能力,科學的評價計算機程序設計人才,爲企業選拔人才提供參考標準(網址http://www.patest.cn)。
每次考試會在若干個不同的考點同時舉行,每個考點用局域網,產生本考點的成績。考試結束後,各個考點的成績將即刻彙總成一張總的排名表。
現在就請你寫一個程序自動歸併各個考點的成績並生成總排名表。
輸入格式:
輸入的第一行給出一個正整數N(≤100),代表考點總數。隨後給出N個考點的成績,格式爲:首先一行給出正整數K(≤300),代表該考點的考生總數;隨後K行,每行給出1個考生的信息,包括考號(由13位整數字組成)和得分(爲[0,100]區間內的整數),中間用空格分隔。
輸出格式:
首先在第一行裏輸出考生總數。隨後輸出彙總的排名表,每個考生的信息佔一行,順序爲:考號、最終排名、考點編號、在該考點的排名。其中考點按輸入給出的順序從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
作者: 陳越
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef struct stu{
string id;
int score;
int finalRank;
int testRoom;
int roomRank;
int num;
}stu;
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 argc, const char * argv[]) {
int n;
cin>>n;
int m;
int sum=0;
stu s[50000];
for (int i=0; i<n; i++) {
cin>>m;
for (int j=sum; j<m+sum; j++) {
cin>>s[j].id>>s[j].score;
s[j].testRoom=i+1;
s[j].num=m;
}
sort(s+sum, s+m+sum, cmp);
for (int j=sum,k=0; j<m+sum; j++,k++) {
if(s[j].testRoom!=s[j-1].testRoom)
k=0;
s[j].roomRank=k+1;
if(s[j].score==s[j-1].score&&j-1>=0&&s[j].testRoom==s[j-1].testRoom){
s[j].roomRank=s[j-1].roomRank;
}
}
sum+=m;
}
sort(s, s+sum, cmp);
for (int j=0; j<sum; j++) {
s[j].finalRank=j+1;
if(s[j].score==s[j-1].score&&j-1>=0){
s[j].finalRank=s[j-1].finalRank;
}
}
cout<<sum<<endl;
for (int i=0; i<sum; i++) {
cout<<s[i].id<<" "<<s[i].finalRank<<" "<<s[i].testRoom<<" "<<s[i].roomRank<<endl;
}
return 0;
}