ACM水题系列 HDOJ2093

来源:互联网 发布:gta5女人物捏脸数据 编辑:程序博客网 时间:2024/05/18 00:10

考试排名

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2624 Accepted Submission(s): 937 
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 20Smith  -1-16800120390John  116-211008255(1)0Josephus  72(3)12610-304721(2)-2Bush  0-1-800000Alice  -267(2)13-1013379(1)-1Bob  0057(5)00168-70
 
Sample Output
Josephus    5  376John        4  284Alice       4  352Smith       3  167Bob         2  325Bush        0    0
 
因为我用的c++,还不熟悉sscanf()函数,所以处理( )比较麻烦。

#include <iostream>#include <iomanip>#include <stdlib.h>#include <algorithm>using namespace std;struct ans{    string name;    int solve;    int time;};bool cmp(const ans &a1,const ans &a2){    if(a1.solve!=a2.solve)        return a1.solve>a2.solve;    else if(a1.time!=a2.time)        return a1.time<a2.time;    else        return a1.name<a2.name;}int main(){    int n,m,i;    ans a[100005];    cin>>n>>m;    for(i=0;cin>>a[i].name;i++)    {        a[i].solve =0;        a[i].time =0;        string temp;        for(int j=0;j<n;j++){            cin>>temp;            string s1,s2;            bool flag = true;            for(int l=0;l<temp.size();l++){                if(temp[0]=='-'||temp[0]=='0')break;                if(temp[l]=='(')                    flag = false;                if(flag == true)                    s1.push_back(temp[l]);                else{                    if(temp[l]!=')'&&temp[l]!='(')                        s2.push_back(temp[l]);                }            }            s1.push_back('\0');            s2.push_back('\0');            if(s1[0]!='\0')                a[i].solve++;            a[i].time+=atoi(s1.c_str())+atoi(s2.c_str())*m;        }    }    sort(a,a+i,cmp);    for(int j=0;j<i;j++)        cout<<setw(10)<<std::left<<a[j].name<<" "<<std::right<<setw(2)<<a[j].solve<<" "<<setw(4)<<a[j].time<<endl;    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办 汽车助力泵漏油怎么办 奔腾b70油耗高怎么办 方向机漏油了怎么办 威志油耗高怎么办 佳美2.4油耗大怎么办 笔记本电脑按键坏了怎么办 电视主板坏了怎么办 面包车电量亏电怎么办 自动挡汽车亏电怎么办 自动挡亏电了怎么办 面包车打不起火怎么办 汽车电瓶亏电怎么办 小车电池没电怎么办 汽车电瓶有电打不着火怎么办 汽车电瓶没电打不着火怎么办 汽车电池没电打不着火怎么办 汽车电瓶亏电打不着火怎么办 自动挡电瓶没电打不着火怎么办 自动挡车子没电打不着火怎么办 自动挡汽车没电打不着火怎么办 自动挡汽车有电打不着火怎么办 p0846骐达故障怎么办 汽车冷却液漏了怎么办 冷却液管子漏了怎么办 电脑网络不可用怎么办 手表带子坏了怎么办 这几天生意不好怎么办 大学不想住宿舍怎么办 在北京买车后被骗怎么办 联通套餐不到期怎么办 联通全国流量包怎么办