考试排名

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11620    Accepted Submission(s): 4117

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

这题我真是哔了狗了,本来可以第二次就A的(第一次数组开太小了)妈蛋搞了半天忘记把单位罚时这茬了,竟然直接当成20,蛋疼地交了三四次。说实话这题在寒假之前一直没把握,看了题目感觉好麻烦的样子,今天学了STL信心大增才写的这题。

代码:

  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<sstream>
  5. #include<cstdio>
  6. #include<iomanip>
  7. using namespace std;
  8. struct stu
  9. {
  10. string na;
  11. string timu[13];
  12. int fashi;
  13. int ac;
  14. };
  15. int power(int n)//手写pow
  16. {
  17. int i,sum=1;
  18. for (i=0; i<n; i++)
  19. {
  20. sum=sum*10;
  21. }
  22. return sum;
  23. }
  24. int jisuan(string &str,const int fen)
  25. {
  26. int sum=0;
  27. int i;
  28. if(str.find("-")!=string::npos)
  29. {
  30. return sum;
  31. }
  32. if(str.find('(')!=string::npos||str.find(')')!=string::npos)
  33. {
  34. int l=str.find('('),r=str.find(')'),k=0;
  35. for (i=r-1; i>l; i--)
  36. {
  37. sum=sum+(str[i]-'0')*power(k);
  38. k++;
  39. }
  40. sum=sum*fen;
  41. str.erase(l,r-l+1);//擦除括号内的内容包括括号,突然发现string::erase参数是(开始处,擦除个数),而非(begin,end).千万注意
  42. }//此题可能后台数据的r+1会超过end,因此与end范围效果一样,可是这样写是很不安全的。
  43. int temp;
  44. istringstream sin(str);//使用istringstream将字符串转成数字
  45. {
  46. sin>>temp;
  47. sum+=temp;
  48. }
  49. return sum;
  50. }
  51. int Ac(const string str)
  52. {
  53. int sum=0;
  54. if((str.find("-")!=string::npos)||(str=="0"))
  55. {
  56. return sum;
  57. }
  58. else
  59. {
  60. sum=1;
  61. return sum;
  62. }
  63. }
  64. bool cmp(const stu a,const stu b)
  65. {
  66. if(a.ac!=b.ac)
  67. return (a.ac>b.ac);
  68. else
  69. {
  70. if(a.fashi==b.fashi)
  71. return (a.na<b.na);
  72. else
  73. return (a.fashi<b.fashi);
  74. }
  75. }
  76. int main(void)
  77. {
  78. int n,fen,j;
  79. cin>>n>>fen;
  80. stu person[10000];
  81. int i,ren=0;
  82. while(cin>>person[ren].na)
  83. {
  84. person[ren].fashi=0;
  85. person[ren].ac=0;
  86. for (i=0; i<n; i++)
  87. {
  88. cin>>person[ren].timu[i];
  89. }
  90. //输入
  91. for (j=0; j<n; j++)
  92. {
  93. if(person[ren].timu[j]=="0")
  94. continue;
  95. else
  96. person[ren].fashi=person[ren].fashi+jisuan(person[ren].timu[j],fen);
  97. }
  98. //计算罚时
  99. for (j=0; j<n; j++)
  100. {
  101. if(person[ren].timu[j]=="0")
  102. continue;
  103. else
  104. person[ren].ac+=Ac(person[ren].timu[j]);
  105. }
  106. //计算ac数
  107. ren++;
  108. }
  109. sort(person,person+ren,cmp);
  110. for (i=0; i<ren; i++)
  111. {
  112. char p[40]={};
  113. (person[i].na).copy(p,(person[i].na).size(),0);
  114. printf("%-10s %2d %4d\n",p,person[i].ac,person[i].fashi);
  115. }
  116. return 0;
  117. }

HDU——2093考试排名(string类及其函数的运用以及istringstream)的更多相关文章

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

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

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

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

  3. HDU 2093 考试排名 模拟题

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

  4. HDU——1073Online Judge(string类以及其对应函数)

    Online Judge Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  5. string类find函数返回值判定

     string类find函数返回值判定 代码示例 #include<iostream> #include<cstring> using namespace std; int m ...

  6. C++string类常用函数

    C++string类常用函数 string类的构造函数:string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初 ...

  7. C++ string类及其函数的讲解

    文章来源于:http://www.cnblogs.com/hailexuexi/archive/2012/02/01/2334183.html C++中string是标准库中一种容器,相当于保存元素类 ...

  8. String 类的实现(3)String类常用函数

      2 #include<iostream> 3 #include<stdio.h> 4 #include<assert.h> 5 #include <iom ...

  9. 洛谷 P1308 统计单词数【string类及其函数应用/STL】

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

随机推荐

  1. Oracle CRS/GI 进程介绍

    在10g和11.1,Oracle的集群称为CRS(Oracle Cluster Ready Service), 在11.2,Oracle的集群称为GI(Grid Infrastructure). 对于 ...

  2. [opencv] applyColorMap

    applyColorMap 功能 转化为热力图,因为热力图我们看的变化更加细微,在很多地方都用到了热力图. 最近在看CAM,所以记一记这个函数. 感觉还是很有用的. 代码 >>> i ...

  3. 手写IOC框架

    1.IOC框架的设计思路 ① 哪些类需要我们的容器进行管理 ②完成对象的别名和对应实例的映射装配 ③完成运行期对象所需要的依赖对象的依赖

  4. js 获取当前年月日时分秒星期

    $("#aa").click(function () { var date = new Date(); this.year = date.getFullYear(); this.m ...

  5. 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。

    web.config文件中的 <system.web> 节点下加入:<webServices>    <protocols>        <add name ...

  6. 用promise封装ajax

    首先贴代码 var ajaxOptions = { url: 'url', method: 'GET', async: true, data: null, dataType: 'text', } fu ...

  7. C++函数的默认参数补充

    1.函数定义时指定默认参数 在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值.也就是说,调用函数时可以省略有默认值的参数 ...

  8. 在 Ubuntu 环境下实现插入鼠标自动关闭触摸板

    Ubuntu 以及其他衍生版本,如 Linux Mint 等等都可以用官方的 PPA 来安装"触摸板指示"应用程序.打开一个终端,运行以下命令: sudo add-apt-repo ...

  9. 微软与百度合作:win10搜索引擎默认百度

    全球最大的中文搜索引擎百度公司与微软公司共同宣布双方展开战略合作.百度并将成为中国市场上Windows 10 Microsoft Edge浏览器的默认主页和搜索引擎.也就是说,将来人们在win10的M ...

  10. 如何封装RESTful Web Service

    所谓Web Service是一个平台独立的,低耦合的,自包含的.可编程的Web应用程序,有了Web Service异构系统之间就可以通过XML或JSON来交换数据,这样就可以用于开发分布式的互操作的应 ...