1339: 考试排名
//幾個(gè)月前做的,數(shù)據(jù)處理類(lèi)型題目
1339: 考試排名
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 114 Solved: 34
[Submit][Status][Web Board]
Description
C++編程考試使用的實(shí)時(shí)提交系統(tǒng),具有即時(shí)獲得成績(jī)排名的特點(diǎn)。它的功能是怎么實(shí)現(xiàn)的呢?
我們做好了題目的解答,提交之后,要么“AC”,要么錯(cuò)誤,不管怎樣錯(cuò)法,總是給你記上一筆,表明你曾經(jīng)有過(guò)一次錯(cuò)誤提交,因而當(dāng)你一旦提交該題 “AC”后,就要與你算一算帳了,總共該題錯(cuò)誤提交了幾回。雖然你在題數(shù)上,大步地躍上了一個(gè)臺(tái)階,但是在耗時(shí)上要攤上你共花去的時(shí)間。特別是,曾經(jīng)有過(guò) 的錯(cuò)誤提交,每次都要攤上一定的單位時(shí)間分。這樣一來(lái),你在做出的題數(shù)上,可能領(lǐng)先別人很多,但是,在做出同樣題數(shù)的人群中,你可能會(huì)在耗時(shí)上處于排名的 劣勢(shì)。
例如:某次考試一共8題(A,B,C,D,E,F,G,H),每個(gè)人做的題都在對(duì)應(yīng)的題號(hào)下有個(gè)數(shù)量標(biāo)記,負(fù)數(shù)表示該學(xué)生在該題上有過(guò)的錯(cuò)誤提交 次數(shù),但到現(xiàn)在還沒(méi)有AC,正數(shù)表示AC所耗的時(shí)間,如果正數(shù)a跟上一對(duì)括號(hào),里面有個(gè)整數(shù)b,那就表示該學(xué)生提交該題AC了,耗去了時(shí)間a,同時(shí),曾經(jīng) 錯(cuò)誤提交了b次,因此對(duì)于下述輸入數(shù)據(jù):
name A B C D E F G H
Smith -1 -16 8 0 0 120 39 0
John 116 -2 11 0 0 82 55(1) 0
Jose 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
若每次錯(cuò)誤提交的罰分為20分,則其排名從高到低應(yīng)該是這樣的:
Jose 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0
Input
輸入數(shù)據(jù)的第一行是考試題數(shù)n(1≤n≤12)以及單位罰分?jǐn)?shù) m(10≤m≤20),p名學(xué)生數(shù),每行數(shù)據(jù)描述一個(gè)學(xué)生的用戶名(不多于10個(gè)字符的字串)以及對(duì)所有n道題的答題現(xiàn)狀,其描述采用問(wèn)題描述中的數(shù)量標(biāo)記的格式,見(jiàn) 上面的表格,提交次數(shù)總是小于100,AC所耗時(shí)間總是小于1000。
Output
將這些學(xué)生的考試現(xiàn)狀,輸出一個(gè)實(shí)時(shí)排名。實(shí)時(shí)排名顯然先按AC題數(shù)的多 少排,多的在前,再按時(shí)間分的多少排,少的在前,如果湊巧前兩者都相等,則按名字的字典序排,小的在前。每個(gè)學(xué)生占一行,輸出名字(10個(gè)字符寬),做出 的題數(shù)(2個(gè)字符寬,右對(duì)齊)和時(shí)間分(4個(gè)字符寬,右對(duì)齊)。名字、題數(shù)和時(shí)間分相互之間有一個(gè)空格。
Sample Input
8 20 6
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
AC_code :
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; struct stu {char name[15];int acnum;int time; }; bool cmp(stu x,stu y) {if(x.acnum == y.acnum){if(x.time == y.time){return strcmp(x.name,y.name) < 0;}return x.time < y.time;}return x.acnum > y.acnum; } int main() {int n,m,p;while(~scanf("%d%d%d",&n,&m,&p)){struct stu date[p+2];int k = 0;while(p--){scanf("%s",date[k].name);int core;date[k].acnum = 0,date[k].time = 0;for( int i = 0; i < n; i++){scanf("%d",&core);if(core > 0){date[k].acnum ++;date[k].time += core;if(getchar() == '('){int t;char c;scanf("%d",&t);date[k].time += t*m;c=getchar();}}}k++;}sort(date,date+k,cmp);//p已經(jīng)變?yōu)?1了,所以只能用kfor(int j = 0; j < k; j++){printf("%-10s %2d %4d\n",date[j].name,date[j].acnum,date[j].time);}}return 0; }總結(jié)
以上是生活随笔為你收集整理的1339: 考试排名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1854: zbj的可乐(思维题)
- 下一篇: 1127: 第三章:再见,林静!