日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【最详细解析+难点分析】1085 PAT单位排行 (25分)

發(fā)布時(shí)間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【最详细解析+难点分析】1085 PAT单位排行 (25分) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

立志用最少的代碼做最高效的表達(dá)


PAT乙級(jí)最優(yōu)題解——>傳送門(mén)


每次 PAT 考試結(jié)束后,考試中心都會(huì)發(fā)布一個(gè)考生單位排行榜。本題就請(qǐng)你實(shí)現(xiàn)這個(gè)功能。

輸入格式:
輸入第一行給出一個(gè)正整數(shù) N(≤10^?5),即考生人數(shù)。隨后 N 行,每行按下列格式給出一個(gè)考生的信息:

準(zhǔn)考證號(hào) 得分 學(xué)校
其中準(zhǔn)考證號(hào)是由 6 個(gè)字符組成的字符串,其首字母表示考試的級(jí)別:B代表乙級(jí),A代表甲級(jí),T代表頂級(jí);得分是 [0, 100] 區(qū)間內(nèi)的整數(shù);學(xué)校是由不超過(guò) 6 個(gè)英文字母組成的單位碼(大小寫(xiě)無(wú)關(guān))。注意:題目保證每個(gè)考生的準(zhǔn)考證號(hào)是不同的。

輸出格式:
首先在一行中輸出單位個(gè)數(shù)。隨后按以下格式非降序輸出單位的排行榜:

排名 學(xué)校 加權(quán)總分 考生人數(shù)
其中排名是該單位的排名(從 1 開(kāi)始);學(xué)校是全部按小寫(xiě)字母輸出的單位碼;加權(quán)總分定義為乙級(jí)總分/1.5 + 甲級(jí)總分 + 頂級(jí)總分*1.5的整數(shù)部分;考生人數(shù)是該屬于單位的考生的總?cè)藬?shù)。

學(xué)校首先按加權(quán)總分排行。如有并列,則應(yīng)對(duì)應(yīng)相同的排名,并按考生人數(shù)升序輸出。如果仍然并列,則按單位碼的字典序輸出。

輸入樣例:
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


一道非常經(jīng)典的模擬題, 洋洋灑灑寫(xiě)了60多行,一遍過(guò)~ 還是非常開(kāi)心滴(*^▽^*)

難點(diǎn)

1、如何按給定規(guī)則排序。
解決:自定義結(jié)構(gòu)體, 自定義sort函數(shù)的排序規(guī)則,見(jiàn)代碼第11行

2、如何以學(xué)校姓名為主鍵對(duì)數(shù)據(jù)進(jìn)行歸類(lèi)
解決:定義unordered_map映射,實(shí)現(xiàn)通過(guò)校名將不同的數(shù)據(jù)歸類(lèi)

3、最后如何輸出形如11344這樣的排序
解決:見(jiàn)代碼第53行。


代碼

#include<bits/stdc++.h> using namespace std;struct School {string name;double score = 0; //加權(quán)分?jǐn)?shù) int p = 0; //考生人數(shù) }sc[100010]; //自定義排序規(guī)則 int cmp(School s1, School s2) {if(s1.score != s2.score) return s1.score > s2.score;else {if(s1.p != s2.p) return s1.p < s2.p;else return s1.name < s2.name;} }int main() {int n; cin >> n;unordered_map<string, int>m;int num = 0; //學(xué)校個(gè)數(shù) for(int i = 0; i < n; i++) {string id, name;int score;cin >> id >> score >> name;//全部變成小寫(xiě) for(int i = 0; i < name.length(); i++) name[i] = tolower(name[i]);//個(gè)數(shù)與名字做映射 if(!m.count(name))m[name] = num++;//名字sc[m[name]].name = name; //分?jǐn)?shù) if(id[0] == 'B') sc[m[name]].score += score/1.5;else if(id[0] == 'A') sc[m[name]].score += score;else sc[m[name]].score += score*1.5;//學(xué)生個(gè)數(shù)sc[m[name]].p++; }for(int i = 0; i < num; i++) sc[i].score = (int)(sc[i].score);//排序 sort(sc, sc+num, cmp);//輸出形如11344這樣的排名 cout << num << '\n'; int num1 = 1;int x1 = sc[0].score, x2;cout << 1 << ' ' << sc[0].name << ' ' << sc[0].score << ' ' << sc[0].p << '\n';for(int i = 1; i < num; i++) {x2 = sc[i].score;if(x1 != x2) num1 = i+1; cout << num1 << ' ' << sc[i].name << ' ' << sc[i].score << ' ' << sc[i].p << '\n'; x1 = x2;}return 0; }

耗時(shí)


每日一句

零星的變好,最后也會(huì)如星河般閃耀。

總結(jié)

以上是生活随笔為你收集整理的【最详细解析+难点分析】1085 PAT单位排行 (25分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。