考试排名

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2444 Accepted Submission(s): 864
 
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),每行数据描写叙述一个学生的username(不多于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 <iostream>
#include <string>
#include <algorithm>
#include <iomanip>
using std::endl;
using std::cin;
using std::cout;
using std::string;
using std::sort;
using std::setw;
using std::ios;
const int MAXN = 1000;
struct student{
string name;
int numSolved;
int time;
}stu[MAXN];
//处理字符串的函数
int strtoint(string s , int penaltyTime)
{
int value=0 , sum=0;
for(int i=0; i<s.length(); ++i)
{
if(s[i]=='(')
{
sum+=value;
value = 0;
}else if(s[i]==')')
{
sum+=(value*penaltyTime);
}else{
value=value*10+(s[i]-'0');
}
}
return sum > value ? sum:value;
}
//排序函数
bool cmp(student a , student b)
{
if(a.numSolved > b.numSolved)
return true;
if(a.numSolved == b.numSolved)
return a.time < b.time;
if(a.numSolved==b.numSolved && a.time == b.time)
return a.name < b.name;
return false;
}
int main()
{
#ifdef LOCAL
freopen("input.txt" , "r" , stdin);
#endif
int n , penaltyTime;
cin >> n >> penaltyTime;
string name , str;
int m = 0;
//输入
while(cin >> name)
{
stu[m].name = name;
for(int i=0; i<n; ++i)
{
cin >> str;
if(str[0] >'0')
{
stu[m].numSolved++;
stu[m].time += strtoint(str , penaltyTime);
}
}
m++;
}
//排序
sort(stu , stu+m , cmp);
//输出
for(int i=0; i<m; ++i)
{
//控制左对齐
cout.flags(ios::left);
//控制占用字符
cout << setw(10) << stu[i].name << " ";
//控制右对齐
cout.flags(ios::right);
//控制字符和输出格式
cout << setw(2) << stu[i].numSolved << " ";
cout << setw(4) << stu[i].time;
cout << endl;
}
return 0;
}


HDU2093--考试排名的更多相关文章

  1. hdu2093 考试排名(还需完善)

    下面代码是借鉴的.好多的知识点等着完善 #include <iostream> #include <string> #include <algorithm> usi ...

  2. HDU——2093考试排名(string类及其函数的运用以及istringstream)

    考试排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)

    Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错 ...

  4. 5N - 考试排名

    C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么“AC”,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提 ...

  5. B - 考试排名

    C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法,总是给你记上一笔,表明 ...

  6. HDU 2093 考试排名 模拟题

    解题报告: 题目描述:写一个程序给一个编程考试C++实时提交系统排名,给你的数据是题目的总数,每次错误提交罚的时间分,每位用户的姓名,然后是输入用户每题的完成情况,有一下几种情况,第一,输入只有一个正 ...

  7. 题解报告:hdu 2093 考试排名

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的 ...

  8. HD-ACM算法专攻系列(16)——考试排名

    问题描述: 源码: 主要要注意输出格式. #include"iostream" #include"iomanip" #include"algorith ...

  9. ZJNU 1164 - 考试排名——中级

    1.如果一个单元为0,表示没做过这题,不计入成绩 2.如果一个单位为负数,表示做错了这题,不计入成绩 所以只要一个单元为正数(不论是否有括号)都说明做出了这一题,计入成绩 将名字和成绩都当作字符串读入 ...

  10. HDU2093 字符串2种不错的读入思路

    <span style="font-family: 'Times New Roman'; font-size: 12px; background-color: rgb(255, 255 ...

随机推荐

  1. mysql 解压缩和赋权

    拉开拉链mysql紧凑根文件夹 注意ini配置文件的内容 basedir = D:\mysql-5.6.17-winx64  datadir = D:\mysql-5.6.17-winx64  por ...

  2. HTML5学习笔记简明版(10):过时的元素和属性

    被遗弃的元素(Element) 这个小节里列出的元素在HTML5里将不再使用,现有文档升级到 HTML5的话能够使用一些替代方案.比如parser section 能够处理isindex 元素的功能. ...

  3. WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法

    原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...

  4. (大数据工程师学习路径)第一步 Linux 基础入门----Linux 下软件安装

    介绍 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用. 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二 ...

  5. i++与++i哪个效率更高

    简单的比较前缀自增运算符和后缀自增运算符的效率是片面的, 因为存在很多因素影响这个问题的答案. 首先考虑内建数据类型的情况: 如果自增运算表达式的结果没有被使用, 而是仅仅简单地用于增加一元操作数, ...

  6. sql小总结

    ---------------------------------------------------------------------------------------------------- ...

  7. 优秀团队建设--美国式团队(ppt)

    美国式团队 一.团队精神 团队精神反映一个人的素养.一个人的能力,一个人与别人合作的精神和能力.一个团队是个有机的总体,作为个人,仅仅有全然融入到这个有机总体之中,才干最大限度地体现自己的价值. 团队 ...

  8. 《C++ Primer Plus》学习笔记10

    <C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...

  9. ASPNETPager常用属性

    <webdiyer:AspNetPager ID="pager" runat="server" class="page" FirstP ...

  10. paramiko socket.error: Int or String expected

    paramiko socket.error: Int or String expected paramiko的环境: Python 2.6.6 paramiko==1.14.0 正常的paramiko ...