Week 2 做題排名 多關鍵字排序

2021-10-03 13:56:32 字數 2129 閱讀 7099

根據做題的ac數、時間以及姓名字典排序。每個人做的題都在對應的題號下有個數量標記,負數表示該學生在該題上有過的錯誤提交次數但到現在還沒有ac,正數表示ac所耗的時間,如果正數a跟上了一對括號,裡面有個正數b,則表示該學生ac了這道題,耗去了時間a,同時曾經錯誤提交了b次。未ac的不計入時間,ac的題目,時間為a+b*單位罰時。

input

輸入資料報含多行,第一行是共有的題數n(1≤n≤12)以及單位罰時m(10≤m≤20),之後的每行資料描述乙個學生的資訊,首先是學生的使用者名稱(不多於10個字元的字串)其次是所有n道題的得分現狀,其描述採用問題描述中的數量標記的格式,見上面的**。

output

根據這些學生的得分現狀,輸出乙個實時排名。實時排名顯然先按ac題數的多少排,多的在前,再按時間分的多少排,少的在前,如果湊巧前兩者都相等,則按名字的字典序排,小的在前。每個學生佔一行,輸出名字(10個字元寬),做出的題數(2個字元寬,右對齊)和時間分(4個字元寬,右對齊)。名字、題數和時間分相互之間有乙個空格。資料保證可按要求的輸出格式進行輸出。

樣例輸入

8 20

gugudong 96 -3 40(3) 0 0 1 -8 0

hrz 107 67 -3 0 0 82 0 0

tt 120(3) 30 10(1) -3 0 47 21(2) -2

omrailgun 0 -99 -8 0 -666 -10086 0 -9999996

yjq -2 37(2) 13 -1 0 113(2) 79(1) -1

zjm 0 0 57(5) 0 0 99(3) -7 0

樣例輸出

tt          5  348

yjq 4 342

gugudong 3 197

hrz 3 256

zjm 2 316

omrailgun 0 0

學生結構體包括姓名,ac數,時間。

排序函式:多關鍵字排序,先判斷ac數,ac數多的排名靠前,如果相等,再判斷時間,時間少的排名靠前,如果相等,按姓名字典再排序。

學生資料處理:對學生每題的資訊採用int輸入,判斷輸入正負,負數表明該題未ac,不存在罰時,繼續輸入下一題資訊,正數則將時間計入學生結構體time中,如果在輸入int型別資料後有字元『(』表明存在罰時,此時再輸入int型別的罰時,將罰時加入學生結構體的time中。

對學生結構體採用sort函式排序

按照題目要求格式進行輸出

本題的關鍵在於將輸入的學生資料進行準確的判斷,我採用的是將資料和字元分開讀入(加入判斷是否需要讀字元的判斷條件)。另一種對資料進行處理的思路是採用string讀入學生每道題的資料,string以空格和換行為下一條資料的分界,輸入的學生的做題資訊剛好以空格分隔,判斷string中是否含有『(』 ,對『)』之前的資料進行處理也可以得到相應的罰時。(開始寫的時候沒想到string,現在覺得這個方法也挺方便。

#include

#include

#include

#include

#include

using

namespace std;

struct node

;bool

cmp(node x,node y)

else

if(x.time!=y.time)

//比較罰時

else

//比較姓名字典序

return

(strcmp

(x.name,y.name)

<0)

;}intmain()

} index++;}

sort

(stu,stu+index,cmp)

;for

(int i=

0;i)}

福大OJ 多關鍵字排序和排名

下面是某一屆學生在oj系統某一時刻的完成情況統計 學生總數不超過170人 學號 姓名 解題數目 提交次數 222200221 高豔紅 77 124 222200116 吳志贇 80 90 222200240 高一鑫 80 173 222200111 唐煥翔 81 157 學號用字串存放 長度為9 姓...

lintcode多關鍵字排序

給定 n 個學生的學號 從 1 到 n 編號 以及他們的考試成績,表示為 學號,考試成績 請將這些學生按考試成績降序排序,若考試成績相同,則按學號公升序排序。使用sort方法,先對item0排序,再對item1排序,優先順序越高的排序越後做 class solution param array th...

成績排序 多關鍵字

題目描述 用一維陣列儲存學號和成績,然後,按成績排序輸出。輸入描述 輸入第一行包括乙個整數n 1 n 100 代表學生的個數。接下來的n行每行包括兩個整數p和q,分別代表每個學生的學號和成績。輸出描述 按照學生的成績從小到大進行排序,並將排序後的學生資訊列印出來。如果學生的成績相同,則按照學號的大小...