PAT排名匯總(25 分)
計算機程序設計能力考試(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
#include <iostream> #include <cstring> #include <string> #include <algorithm> #include <queue> using namespace std; struct node { string s; int fs; int bh;//bian h int dp; friend bool operator <(node x,node y) { if(x.fs==y.fs) return x.s > y.s; else return x.fs<y.fs; } }a[305]; bool cmp(node x,node y) { return x.fs>y.fs; } priority_queue<node>q; int main() { int n; cin>>n; int i,j; for(i=1;i<=n;i++) { int k; cin>>k; for(j=1;j<=k;j++) { cin>>a[j].s>>a[j].fs; a[j].bh=i; } sort(a+1,a+1+k,cmp); int mm=-1; int o=1; for(j=1;j<=k;j++) { if(mm!=-1&&mm==a[j].fs) { a[j].dp=o-1; o++; } else { a[j].dp=o; o++; } mm=a[j].fs; q.push (a[j]); } } int o=1; int mm=-1; while(!q.empty ()) { node x=q.top();q.pop();; if(mm!=-1&&mm==x.fs) { cout<<x.s<<" "<<o-1<<" "<<x.bh<<" "<<x.dp; o++; } else { cout<<x.s<<" "<<o++<<" "<<x.bh<<" "<<x.dp; } mm=x.fs; if(!q.empty ()) cout<<endl; } return 0; }