1. <span style="font-family: 'Times New Roman'; font-size: 12px; background-color: rgb(255, 255, 255);">
  2. </span>
  1. <span style="font-family: 'Times New Roman'; font-size: 12px; background-color: rgb(255, 255, 255);">考试排名</span>

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

Total Submission(s): 9160    Accepted Submission(s): 3201

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
  1. 8 20
  2. Smith -1 -16 8 0 0 120 39 0
  3. John 116 -2 11 0 0 82 55(1) 0
  4. Josephus 72(3) 126 10 -3 0 47 21(2) -2
  5. Bush 0 -1 -8 0 0 0 0 0
  6. Alice -2 67(2) 13 -1 0 133 79(1) -1
  7. Bob 0 0 57(5) 0 0 168 -7 0
 
Sample Output
  1. Josephus 5 376
  2. John 4 284
  3. Alice 4 352
  4. Smith 3 167
  5. Bob 2 325
  6. Bush 0 0


第一种scanf("%d%c") 读法 
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. typedef struct node
  5. {
  6. char name[20];
  7. int num, time;
  8. }node;
  9. node stu[10001];
  10. int cmp(const void *a,const void *b)
  11. {
  12. node *aa=(node *)a; node *bb=(node *)b;
  13. if(bb->num!=aa->num) return bb->num-aa->num;
  14. else if(aa->time!=bb->time) return aa->time-bb->time;
  15. else return strcmp(aa->name,bb->name);
  16. }
  17. int main()
  18. {
  19. freopen("a.in","r",stdin);
  20. freopen("a.out","w",stdout);
  21. int n,m,xia=0,i,tempi;
  22. char tempc;
  23. scanf("%d%d",&n,&m);
  24. while(scanf("%s",stu[xia].name)!=EOF)
  25. {
  26. for(i=1;i<=n;i++)
  27. {
  28. scanf("%d%c",&tempi,&tempc);
  29. if(tempi>0)
  30. {
  31. stu[xia].num++;
  32. stu[xia].time+=tempi;
  33. if(tempc=='(')
  34. {
  35. scanf("%d%c",&tempi,&tempc);
  36. stu[xia].time+=tempi*m;
  37. }
  38. }
  39. }
  40. xia++;
  41. }
  42. qsort(stu,xia,sizeof(stu[0]),cmp);
  43. for(i=0;i<xia;i++)
  44. printf("%-10s %2d %4d\n",stu[i].name,stu[i].num,stu[i].time);
  45. return 0;
  46. }

第二种 读入判断末尾区别

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <math.h>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <cstdio>
  7. using namespace std;
  8.  
  9. struct Stu
  10. {
  11. char Name[20];
  12. int AC;
  13. int Time;
  14. };
  15. Stu a[100001];
  16. int cmp(Stu a, Stu b)
  17. {
  18. if (a.AC != b.AC)
  19. return a.AC > b.AC;
  20. else
  21. return a.Time < b.Time;
  22. }
  23. int main()
  24. {
  25. int problem, punish;
  26. cin >> problem >> punish;
  27. char tmp[20];
  28. int cnt = 0;
  29. while (cin >> a[cnt].Name)
  30. {
  31. a[cnt].AC = 0;
  32. a[cnt].Time = 0;
  33. for (int j = 0; j < problem; j ++)
  34. {
  35. cin >> tmp;
  36. int l = strlen(tmp);
  37.  
  38. if (tmp[0] == '-')
  39. {
  40. ;
  41. }
  42. else if (tmp[l-1] != ')')
  43. {
  44. if(atoi(tmp))
  45. {
  46. a[cnt].AC ++;
  47. a[cnt].Time += atoi(tmp);
  48. }
  49. }
  50. else
  51. {
  52. int s = 0;
  53. a[cnt].AC ++;
  54. for (int m = 0; m < l; m ++)
  55. {
  56. if (tmp[m] != '(' && tmp[m] != ')')
  57. {
  58. s = s * 10 + tmp[m] - '0';
  59. }
  60.  
  61. else if (tmp[m] == '(')
  62. {
  63. a[cnt].Time += s;
  64. s = 0;
  65. }
  66. else if(tmp[m] == ')')
  67. {
  68. a[cnt].Time += s * punish;
  69. }
  70. }
  71. }
  72. }
  73. cnt ++;
  74. }
  75. sort(a, a + cnt, cmp);
  76. for (int j = 0; j < cnt; j ++)
  77. {
  78. printf("%-10s %2d %4d\n", a[j].Name, a[j].AC, a[j].Time);
  79. }
  80. return 0;
  81. }

HDU2093 字符串2种不错的读入思路的更多相关文章

  1. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  2. [小专题]另一种字符串匹配的思路——Shift-And算法

    吐槽:前两天打组队赛遇到一个字符串的题考了这个(见:http://acm.hdu.edu.cn/showproblem.php?pid=5972 ) 当时写了个KMP瞎搞然后TLE了(害),赛后去查了 ...

  3. C#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装

    1.结构 第一个类 public class GetMethods{...}      类中的变量:                                                   ...

  4. PHP字符串三种定义方式

    PHP的字符串有三种定义方式:单引号 .双引号 .定界符  1.单引号:指定一个简单字符串的最简单的方法是用单引号(字符 ')括起来. 在被单引号括起来的字符串中,要再表示一个单引号,需要用反斜线(\ ...

  5. Longest Palindromic Substring (最长回文字符串)——两种方法还没看,仍需认真看看

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  6. javascript参数化拼接字符串两种方法

    javascript如果直接使用字符串+的话,会被大量单引号搞晕,可以有两种比较简单的方法使用参数化拼接. 方式一,传统js //示例:StringFormat("abc{0}def&quo ...

  7. Vue组件template模板字符串几种写法

    在定义Vue组件时,组件的模板template选项需要的是一个字符串,当其内容较复杂需要换行时,需要简单处理一下,具体有五种方式: 方式一:使用 \ 转义换行符 <!DOCTYPE html&g ...

  8. 一种不错的 BFF Microservice GraphQL/REST API 层的开发方式

    云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服 ...

  9. 实战MEF(1):一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

随机推荐

  1. VS2012 拆分视图按钮不见,代码,设计

    工具--选项--HTML设计器 然后重启就有了.

  2. hdu1175连连看

    Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...

  3. C++ 语言特性的性能分析

    转载:http://www.cnblogs.com/rollenholt/archive/2012/05/07/2487244.html      大多数开发人员通常都有这个观点,即汇编语言和 C 语 ...

  4. 图片ppm编码格式

    ppm图片有2种格式, ASCII格式和binary格式. (1)ppm头部分 由三部分组成,这三部分由回车或换行分割,但PPM的标准中是要求空格. 第一行通常是P3或P6,说明是PPM格式: 第二行 ...

  5. img元素高度多出来的几像素

    HTML: <div class="test"><img src="body2.jpg" alt=""></d ...

  6. js序列化json对象

    SerializeJsonToStr : function( oJson ) { if( oJson == null ) return "null"; if( typeof(oJs ...

  7. 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

    python IO操作的时候出现这种错误,检查一些url的目录 这个时候需要注意一下一般的dir举例是:“F:\DOCUMENT\4.7” 需要修改成为:F:/DOCUMENT/4.7

  8. TF卡座(外焊、内焊、掀盖式、全塑、简易)

    TF卡座(外焊.内焊.掀盖 式.全塑.简易

  9. DOSUSB 2.0 免费版的限制原理

    两年前,我在写USB的文章时,多次提到了DOSUSB这个东东,这两年也没有关注这方面的变化,最近,有机会重新进入DOSUSB的官方网站(www.dosusb.net),欣喜地发现,这个网站不仅依然存在 ...

  10. windows 7 系统进程服务详解

    windows 7已经发布有段时间了,相信很多网友都已经换上了传说中非常完美的win7系统.win7不仅继承而且还超越了vista的美观界面,性能优化方面也下足了功力.还拥有强大的win xp兼容性, ...