每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。
輸入第一行給出乙個正整數 n(≤105),即考生人數。隨後 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
題解:
一開始拿到這題沒有頭緒,參考(劃掉)抄寫了別人**後,明白了。這題用stl中的map非常容易做,有些小可愛一看題目**長,就不想看了,其實,多做幾個這種題你會發現都是有固定套路的~
言歸正傳,題目要求輸出的是 排名、學校、總分、總人數。排名可以輕易得到,其他這些資訊肯定要用結構體存下來,所以我們先定義乙個struct node{};
要用到兩個map,⼀個cnt⽤來儲存某學校名稱對應的參賽⼈數,另⼀個sum計算某學校名稱對應的總 加權成績。每次學校名稱string school都要轉化為全⼩寫,將map中所有學校都儲存在vector ans 中,型別為node,node中包括學校姓名、加權總分、參賽⼈數。對ans陣列排序,根據題⽬要求寫好 cmp函式,最後按要求輸出。對於排名的處理:設⽴pres表示前⼀個學校的加權總分,如果pres和當 前學校的加權總分不同,說明rank等於陣列下標+1,否則rank不變~ 注意:總加權分數取整數部分是要對最後的總和取整數部分,不能每次都直接⽤int儲存,不然會有⼀ 個3分測試點不通過~ ps: 更新後的pat系統會導致之前使⽤map的**最後⼀個測試點超時,更改為 unordered_map後就能ac~
可能有些童鞋會不理解ans.push_back()的內容,解釋一下:第乙個是school,第二個是總成績,第三個是總人數。
一開始做這種題沒有思路太正常了,做的很慢也沒有關係,唯手熟爾,一起加油!
#include #include #include #include using namespace std;
struct node;
bool cmp(node a, node b)
int main()
vectorans;
for(auto it = cnt.begin(); it != cnt.end(); ++it));
} sort(ans.begin(), ans.end(), cmp);
int rank = 0, pres = -1;//計算排名
printf("%d\n", ans.size());
for(int i = 0; i < ans.size(); ++i)
return 0;
}
PAT B 1085 PAT單位排行 (25 分)
解題點 1.用結構體來儲存各個學校的三項成績,參賽人員等全部資訊。2.用map來儲存 學校名稱,與學校資訊 的鍵值對 3.將map中的資訊儲存自定義的資料結構陣列中,用sort函式進行排序,最後輸出 每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入第一行給出...
PAT 1085 PAT單位排行
每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入格式 輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校 其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表...
1085 PAT單位排行
每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表甲級,t代表...