1、如果一个单元为0,表示没做过这题,不计入成绩

2、如果一个单位为负数,表示做错了这题,不计入成绩

所以只要一个单元为正数(不论是否有括号)都说明做出了这一题,计入成绩

将名字和成绩都当作字符串读入,方便处理含有括号的情况

字符串读入后检查末尾是否为')'即可分开判断有无括号的情况(如果有括号,成绩一定存在)

为了方便可以用 结构体/自定义函数/排序自定义compare函数 来实现

当然,不使用结构体可以用普通数组代替

不使用algorithm库的sort可以用冒泡选择这两种基本排序做(不会存在卡时间的情况)

做法1:C/无结构体/无sort

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main(){
  4. int i,u,n,m,tm[],ac[],poi=,id,dt;
  5. char nm[][],cd[],k;
  6. scanf("%d%d",&n,&m);
  7. while(scanf("%s",nm[poi])!=EOF){
  8. tm[poi]=;
  9. ac[poi]=;
  10. for(i=;i<n;i++){
  11. scanf("%d",&dt);
  12. if(dt>){
  13. ac[poi]++;
  14. tm[poi]+=dt;
  15. scanf("%c",&k);
  16. if(k=='('){
  17. scanf("%d%*c",&dt);
  18. tm[poi]+=dt*m;
  19. }
  20. }
  21. }
  22. poi++;
  23. }
  24. for(i=;i<poi;i++)//排序
  25. for(u=poi-;u>i;u--)
  26. if(ac[u]>ac[u-]||ac[u]==ac[u-]&&tm[u]<tm[u-]||ac[u]==ac[u-]&&tm[u]==tm[u-]&&strcmp(nm[u-],nm[u])>){
  27. id=ac[u];
  28. ac[u]=ac[u-];
  29. ac[u-]=id;
  30. id=tm[u];
  31. tm[u]=tm[u-];
  32. tm[u-]=id;
  33. strcpy(cd,nm[u]);
  34. strcpy(nm[u],nm[u-]);
  35. strcpy(nm[u-],cd);
  36. }
  37. for(i=;i<poi;i++)
  38. printf("%-10s %2d %4d\n",nm[i],ac[i],tm[i]);
  39.  
  40. return ;
  41. }

做法2:C++/结构体/sort

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. struct node{
  6. char name[];
  7. int sum,ac;
  8. }stu[];
  9. int m;
  10. char dat[];
  11. int getDigit(int l,int r){
  12. int i=l,res=,f=;
  13. if(dat[i]=='-'){
  14. f=-;
  15. i++;
  16. }
  17. for(;i<r;i++)
  18. res=res*+dat[i]-'';
  19. return f*res;
  20. }
  21. int getDScore(int len){
  22. int i;
  23. for(i=;i<len;i++)
  24. if(dat[i]=='(')
  25. break;
  26. return getDigit(,i)+m*getDigit(i+,len-);
  27. }
  28. bool cmp(node a,node b){
  29. if(a.ac!=b.ac)
  30. return a.ac>b.ac;
  31. if(a.sum!=b.sum)
  32. return a.sum<b.sum;
  33. return strcmp(a.name,b.name)==-;
  34. }
  35. int main(){
  36. int n,i,t=,len,d;
  37. scanf("%d%d",&n,&m);
  38. while(scanf("%s",stu[t].name)!=EOF){
  39. for(i=;i<=n;i++){
  40. scanf("%s",dat);
  41. len=strlen(dat);
  42. if(dat[len-]!=')'){
  43. d=getDigit(,len);
  44. if(d>){
  45. stu[t].sum+=d;
  46. stu[t].ac++;
  47. }
  48. }
  49. else{
  50. stu[t].sum+=getDScore(len);
  51. stu[t].ac++;
  52. }
  53. }
  54. t++;
  55. }
  56. sort(stu,stu+t,cmp);
  57. for(i=;i<t;i++)
  58. printf("%-10s %2d %4d\n",stu[i].name,stu[i].ac,stu[i].sum);
  59.  
  60. return ;
  61. }

ZJNU 1164 - 考试排名——中级的更多相关文章

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

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

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

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

  3. 5N - 考试排名

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

  4. B - 考试排名

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

  5. HDU 2093 考试排名 模拟题

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

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

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

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

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

  8. ZJNU 1531 - 丢手绢--中级

    可以将相同的人数分块存在数组gp中先 例如RRGGGRBBBBRR 则gp[1~5]={2,3,1,4,2} 首先可以知道,如果要让没有相邻的相同,只需要每个gp[i]/2向下取整即可得出最少需要改变 ...

  9. ZJNU 1160 - 不要62——中级

    取模判断,数组模拟 /* Written By StelaYuri */ #include<stdio.h> ]; int main(){ int n,m,i,s,t; ;i<;i+ ...

随机推荐

  1. 错误:selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities

    错误再现 原因:firefox浏览器版本和浏览器驱动版本不匹配 解决办法:卸载高版本浏览器,安装低版本浏览器

  2. [ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: URLError: <urlopen error [Errno 10061] Connection refused>

    [ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: URLError: <urlopen error ...

  3. Day1-T3

    原题目 Describe:两个限制条件,求第三属性的最大和 code: #pragma GCC optimize(2) #include<bits/stdc++.h> using name ...

  4. JS事件-对象监视事件,事件触发函数

    写在前面: 一句话作为本文的核心思想:对象监视事件,事件触发函数: (一)事件 1.事件分类 (1)鼠标事件 click()                      鼠标单击 dblclick()  ...

  5. FFmpeg的基本使用

    1.FFmpeg理解 (1)FFmpeg是一个视屏.音频编码工具 (2)x项目名称mpeg来源mpeg编码标准,但不局限只能使用mpeg编码标准.FF 表示fast forward (3)被广泛使用. ...

  6. MySQL 表查询语句练习题

    MySQL 表查询语句练习题: 一.  设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表 ...

  7. 使用Python绘制新型冠状肺炎全国增长趋势图

    截至1月28日24时,国家卫生健康委收到31个省(区.市)累计报告确诊病例5974例,现有重症病例1239例,累计死亡病例132例,累计治愈出院103例.现有疑似病例9239例.目前累计追踪到密切接触 ...

  8. 使用super调用被子类覆盖的父类方法

    1.没有super方法 /* * 子类方法覆盖父类方法,用super方法可以调用父类被覆盖的方法 */ class fruit{ public fruit() { System.out.println ...

  9. 汪慧和201771010123《面向对象程序设计(Java)》第三周学习总结

    1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3)掌握Java语言构造基本程序语法知识(ch1-ch3): (4)利 ...

  10. ZooKeeper解决的问题

    1.解决分布式单点问题 https://www.jianshu.com/p/08b76bd7a634 2.实现分布式环境数据的一致性.访问ZooKeeper树结构时,不同节点返回的数据是一致,不会引起 ...