每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。
輸入格式:
輸入第一行給出乙個正整數 n(≤10^5),即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊:
准考證號 得分 學校
其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別:b代表乙級,a代表甲級,t代表頂級;得分是 [0, 100] 區間內的整數;學校是由不超過 6 個英文本母組成的單位碼(大小寫無關)。注意:題目保證每個考生的准考證號是不同的。
輸出格式:
首先在一行中輸出單位個數。隨後按以下格式非降序輸出單位的排行榜:
排名 學校 加權總分 考生人數
其中排名是該單位的排名(從 1 開始);學校是全部按小寫字母輸出的單位碼;加權總分定義為乙級總分/1.5 + 甲級總分 + 頂級總分*1.5的整數部分;考生人數是該屬於單位的考生的總人數。
學校首先按加權總分排行。如有並列,則應對應相同的排名,並按考生人數公升序輸出。如果仍然並列,則按單位碼的字典序輸出。
輸入樣例:
10 a57908 85 au
b57908 54 lanx
a37487 60 au
t28374 67 cmu
t32486 24 hypu
a66734 92 cmu
b76378 71 au
a47780 45 lanx
a72809 100 pku
a03274 45 hypu
輸出樣例:
5 1 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2
分析
這道題首先建立乙個school的vector集合,然後讀入每條學生資訊,如果學生的學校名字沒有出現過則建立乙個新的school結構體,用該學生的學校的名字去初始化結構體的name,然後根據題目要求的分數計算方法去計算學校的加權分數,並用map去記錄該學校結構體在vector集合中的位置。如果學生的學校名字是出現過的,則通過map可以迅速的獲得該學校在vector的位置,從而來更新該學校的資訊,而且這題要注意題目中對學校的加權分數取整不是每一步加權分數取整而是最後的總加權分數取整,所以每個學校的結構體裡有double score和int fenshu,score是未取整的加權分數,fenshu是取整後的分數,最後按照題目的要求來排序和輸出排名,在輸出排名時要注意按題目的格式輸出即可。
#include
#include
#include
#include
#include
using
namespace
std;
struct school;
string getlower(string str)
bool cmp(const school& s1,const school& s2)else
} sort(vec.begin(), vec.end(), cmp);
int rank=1;
int lastscore=vec[0].fenshu;
cout
1085 PAT單位排行
每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表甲級,t代表...
PAT乙級 1085單位排行
題目 每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入格式 輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校 其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,...
1085 PAT單位排行
題目鏈結 思路借鑑 分析 兩個map,乙個cnt用來儲存某學校名稱對應的參賽人數,另乙個sum計算某學校名稱對應的總加權成績。每次學校名稱string school都要轉化為全小寫,將map中所有學校都儲存在vector ans中,型別為node,node中包括學校姓名 加權總分 參賽人數。對ans...