HDU2093 考试排名【水题】

考试排名

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 9760    Accepted Submission(s): 3401

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 00
120 39
0

John  116
-2 11 00
82 55(1)
0

Josephus  72(3) 12610
-3 0
47 21(2)-2

Bush  0
-1 -8 00
0 0
0

Alice  -2
67(2) 13
-1 0 13379(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

Author

qianneng

Source

迎接新学期——超级Easy版热身赛

题目大意:OJ实时排名系统排序

思路:用结构体存每个人的名字、做题数和总耗费时间。然后计算每个人的做题数

和总耗费时间,之后排名。代码里用到了sscanf函数。可提取字符串中数按"%d"的

格式到整型d中。string中的find();函数返回值为:若找到待查找元素,返回该元素

在string中的位置,否则返回一个特定值string::npos(即-1)。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;

struct Node
{
    string Name;
    int Num;
    int Time;
}A[1100];

int cmp(Node a,Node b)
{
    if(a.Num != b.Num)
        return a.Num > b.Num;
    else
    {
        if(a.Time != b.Time)
            return a.Time < b.Time;
        else
        {
            return a.Name < b.Name;
        }
    }
}
int main()
{
    int N,M,Count = 0;
    string name,temp;
    cin >> N >> M;
    while(cin >> name)
    {
        A[Count].Name = name;
        A[Count].Num = 0;
        A[Count].Time = 0;
        for(int i = 0; i < N; ++i)
        {
            cin >> temp;
            if(temp[0]=='-' || temp[0] == '0')
                continue;
            int d;
            sscanf(temp.c_str(),"%d",&d);
            A[Count].Num++;
            A[Count].Time+= d;
            int pos = temp.find('(');
            if(pos != string::npos)
            {
                sscanf(temp.c_str()+pos+1,"%d",&d);
                A[Count].Time += (d*M);
            }
        }
        Count++;
    }
    sort(A,A+Count,cmp);
    for(int i = 0; i <= Count-1; i++)
    {
        printf("%-10s %2d %4d\n",A[i].Name.c_str(), A[i].Num, A[i].Time);
    }

    return 0;
}
时间: 2024-11-07 20:30:33

HDU2093 考试排名【水题】的相关文章

排名(水题)

排名 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19177    Accepted Submission(s): 7033 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑  每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数

hdu2093(考试排名)

点击打开hdu2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题"AC"后,就要与你算一算帐了,总共该题错误提交了几回.虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间.特别是,曾经有过的错误提交,每次都要摊上一定的单位时间

hdu 4416 水题 浙大计算机研究生复试上机考试-2005年 可是发现自己写代码有问题

Spring3与Hibernate4整合时出现了nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider. hibernate3的时候,用spring来控制sessionfactory用的可以是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,因为用的是hibernate4所以照猫画

【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)

BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Length 695765 Eolv 1000 Accepted 804 kb 0 ms 118 B 739478 Eolv 2463 Accepted 804 kb 0 ms 134 B 696662 Eolv 1968 Accepted 1272 kb 48 ms 137 B 739546 Eolv

HPUOJ1293 考试排名

考试排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9744    Accepted Submission(s): 3398 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法

hdu 1846 Brave Game (巴什博弈 最简单的博弈水题)

Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6434    Accepted Submission(s): 4294 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分

简单的dp hdu 数塔(水题)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21314    Accepted Submission(s): 12808 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少

Uva10474-STL水题-白书

白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include

UESTCOJ-BiliBili, ACFun… And More!(水题)

BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Some of you may have already noticed, there is a team in our final contest whose name is UESTC_BiliBilii, with user id as ACfun. Actually,