1085 PAT單位排行

2021-08-26 15:03:52 字數 2049 閱讀 9438

每次 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

注意:總加權分數取整數部分是要對最後的總和取整數部分,不能每次都直接用int儲存,不然會有乙個3分測試點不通過~

4、5兩個超大測試樣例通不過,這裡我是通過把能換cin的地方全換成scanf,能換cout的地方全換成printf,最後不負我望,兩個都通過了。

首先可以建立乙個結構體,這樣做可以方便排序。另外我用了三個map,分別儲存每個學校的學校成績,報考人數,和學校姓名。最後通過sort排序,按要求輸出就ok。

#include #include #include #include #include #include using namespace std;

struct school

s[100001];

int cmp(school s1, school s2)

void tolower(char *s)

int main(int argc, char const *argv)

mnum[name]++;

if (id[0] == 't')

mgrade[name] += grade*1.5;

else if (id[0] == 'a')

mgrade[name] += grade;

else

mgrade[name] += grade/1.5;

} for (int i = 0; i < idx; i++)

sort(s, s+idx, cmp);

printf("%d\n", idx); // 輸出單位個數

s[0].rank = 1;

cout << 1 << " " << s[0].name << " " << s[0].grade << " " << s[0].people << endl;

for (int i = 1; i < idx; i++)

return 0;

}

1085 PAT單位排行

題目鏈結 思路借鑑 分析 兩個map,乙個cnt用來儲存某學校名稱對應的參賽人數,另乙個sum計算某學校名稱對應的總加權成績。每次學校名稱string school都要轉化為全小寫,將map中所有學校都儲存在vector ans中,型別為node,node中包括學校姓名 加權總分 參賽人數。對ans...

1085 PAT單位排行

每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入格式 輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校 其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表...

1085 PAT單位排行 25

1085.pat單位排行 25 時間限制 500 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入格式 輸入第一行給出乙個正整數n 105 即考生...