HDU 2093 考試排名

2021-06-02 15:02:28 字數 3404 閱讀 4159

problem description

c++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?

我們做好了題目的解答,提交之後,要麼「ac」,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題「ac」後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上了乙個台階,但是在耗時上要攤上你共花去的時間。特別是,曾經有過的錯誤提交,每次都要攤上一定的單位時間分。這樣一來,你在做出的題數上,可能領先別人很多,但是,在做出同樣題數的人群中,你可能會在耗時上處於排名的劣勢。

例如:某次考試一共8題(a,b,c,d,e,f,g,h),每個人做的題都在對應的題號下有個數量標記,負數表示該學生在該題上有過的錯誤提交次數,但到現在還沒有ac,正數表示ac所耗的時間,如果正數a跟上一對括號,裡面有個整數b,那就表示該學生提交該題ac了,耗去了時間a,同時,曾經錯誤提交了b次,因此對於下述輸入資料:

若每次錯誤提交的罰分為20分,則其排名從高到低應該是這樣的:

josephus 5 376

john 4 284

alice 4 352

smith 3 167

bob 2 325

bush 0 0

input

輸入資料的第一行是考試題數n(1≤n≤12)以及單位罰分數m(10≤m≤20),每行資料描述乙個學生的使用者名稱(不多於10個字元的字串)以及對所有n道題的答題現狀,其描述採用問題描述中的數量標記的格式,見上面的**,提交次數總是小於100,ac所耗時間總是小於1000。

output

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

sample input

8 20

smith -1 -16 8 0 0 120 39 0

john 116 -2 11 0 0 82 55(1) 0

josephus 72(3) 126 10 -3 0 47 21(2) -2

bush 0 -1 -8 0 0 0 0 0

alice -2 67(2) 13 -1 0 133 79(1) -1

bob 0 0 57(5) 0 0 168 -7 0

sample output

josephus    5  376

john 4 284

alice 4 352

smith 3 167

bob 2 325

bush 0 0

**:

#include#include#includestruct c

d[1000];

int comp(const void *a,const void *b)

int main()

; scanf("%d %d",&n,&m);

while(scanf("%s",d[j].name)!=eof)

}j++;

}qsort(d,j,sizeof(struct c),comp);

for(i=0;i分析:

這幾天憋著學會了使用結構體,和給結構體快排.就做了幾道練練手.做這道題又學了點新東西

sscanf() ------------------ 從乙個字串中讀進與指定格式相符的資料.

只要輸入**內容後,用輸入"%d(%d)",然後判斷輸入結果,如果是2,表示帶有括號,如果是1,則沒有括號。

1. 常見用法。

char buf[512] ;

sscanf("123456 ", "%s", buf);//此處buf是陣列名,它的意思是將123456以%s的形式存入buf中!

printf("%s\n", buf);

結果為:123456

2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。

sscanf("123456 ", "%4s", buf);

printf("%s\n", buf);

結果為:1234

3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。

sscanf("123456 abcdedf", "%[^ ]", buf);

printf("%s\n", buf);

結果為:123456

4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。

sscanf("123456abcdedfbcdef", "%[1-9a-z]", buf);

printf("%s\n", buf);

結果為:123456abcdedf

當輸入:

sscanf("123456abcdedfbcdef","%[1-9a-z]",buf);

printf("%s\n",buf);

結果為:123456

5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。

sscanf("123456abcdedfbcdef", "%[^a-z]", buf);

printf("%s\n", buf);

結果為:123456abcdedf

6、給定乙個字串iios/12ddwdff@122,獲取 / 和 @ 之間的字串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中

sscanf("iios/12ddwdff@122", "%*[^/]/%[^@]", buf);

printf("%s\n", buf);

結果為:12ddwdff

7、給定乙個字串「hello, world」,僅保留world。(注意:「,」之後有一空格,%s遇空格停止,加*則是忽略第乙個讀到的字串)

sscanf(「hello, world」, "%*s%s", buf);

printf("%s\n", buf);

結果為:world

%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了

如果沒有空格則結果為null。

hdu2093 考試排名

排序水題,但是我還是wa了好幾次,原因是name相同時的排名結果出現了問題,建議用strng處理name輸入 include using namespace std struct guy a 1000 bool cmp guy a,guy b else if a.score b.score else...

hdu 2093 考試排名

problem description c 程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?我們做好了題目的解答,提交之後,要麼 ac 要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題 ac 後,就要與你算一算帳了,總共該...

hdu 2093考試排名

這道題用到了結構體排序 對於sort排序時需要三個引數 排序頭,結尾,排序規則 排序頭,結尾 即左閉右開,對於排序規則預設less 即公升序,標頭檔案帶有greter 降序排列 在自定義規則時需要兩個引數可以理解成兩個比較物件 int comp student s1,student s2 還學到了c...