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

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

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

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

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

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

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

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

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

#include<stdio.h>
#include<string.h>
int main(){
int i,u,n,m,tm[],ac[],poi=,id,dt;
char nm[][],cd[],k;
scanf("%d%d",&n,&m);
while(scanf("%s",nm[poi])!=EOF){
tm[poi]=;
ac[poi]=;
for(i=;i<n;i++){
scanf("%d",&dt);
if(dt>){
ac[poi]++;
tm[poi]+=dt;
scanf("%c",&k);
if(k=='('){
scanf("%d%*c",&dt);
tm[poi]+=dt*m;
}
}
}
poi++;
}
for(i=;i<poi;i++)//排序
for(u=poi-;u>i;u--)
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])>){
id=ac[u];
ac[u]=ac[u-];
ac[u-]=id;
id=tm[u];
tm[u]=tm[u-];
tm[u-]=id;
strcpy(cd,nm[u]);
strcpy(nm[u],nm[u-]);
strcpy(nm[u-],cd);
}
for(i=;i<poi;i++)
printf("%-10s %2d %4d\n",nm[i],ac[i],tm[i]); return ;
}

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

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
char name[];
int sum,ac;
}stu[];
int m;
char dat[];
int getDigit(int l,int r){
int i=l,res=,f=;
if(dat[i]=='-'){
f=-;
i++;
}
for(;i<r;i++)
res=res*+dat[i]-'';
return f*res;
}
int getDScore(int len){
int i;
for(i=;i<len;i++)
if(dat[i]=='(')
break;
return getDigit(,i)+m*getDigit(i+,len-);
}
bool cmp(node a,node b){
if(a.ac!=b.ac)
return a.ac>b.ac;
if(a.sum!=b.sum)
return a.sum<b.sum;
return strcmp(a.name,b.name)==-;
}
int main(){
int n,i,t=,len,d;
scanf("%d%d",&n,&m);
while(scanf("%s",stu[t].name)!=EOF){
for(i=;i<=n;i++){
scanf("%s",dat);
len=strlen(dat);
if(dat[len-]!=')'){
d=getDigit(,len);
if(d>){
stu[t].sum+=d;
stu[t].ac++;
}
}
else{
stu[t].sum+=getDScore(len);
stu[t].ac++;
}
}
t++;
}
sort(stu,stu+t,cmp);
for(i=;i<t;i++)
printf("%-10s %2d %4d\n",stu[i].name,stu[i].ac,stu[i].sum); return ;
}

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. js 工厂设计模式

    class Product{ constructor(name){ this.name = name; } init(){ alert(this.name); } } function Creator ...

  2. kettle将csv文件导入数据库

    具体过程学习了: 1.连接数据库 2.添加新资源库 3.选择Other Repositories 4.选择Database Repository,第二个需要配置额外参数 5.连接数据库相关设置 6.连 ...

  3. 大数据高可用集群环境安装与配置(04)——安装JAVA运行环境

    Hadoop运行在java环境,所以在安装Hadoop之前,需要安装好jdk 提前下载好jdk安装包(jdk-8u161-linux-x64.tar.gz),将它上传到指定的安装目录当中,然后运行安装 ...

  4. java课程之团队开发冲刺阶段2.7

    昨日总结: 1.完整实现课前闹钟提醒功能 遇到的困难: 1.没有遇到大的问题,细节地方没有处理好出现了一下小的情况 今天的任务: 1.实现对课程查询的完整实现 当日总结: 1.以前是使用二级联动下拉框 ...

  5. 二十一、CI框架之MCV

    一.我们在M模型文件里面添加一个文件,代码如下: 二.在C控制器中加载模型,并调用模型函数,输出达到View,控制器代码如下: 三.在View里面输出控制器传过来的参数 四.显示效果如下: 五.我们对 ...

  6. 对spring中IOC和AOP的理解

    IOC:控制反转也叫依赖注入.利用了工厂模式. 为了方便理解,分解成每条以便记忆.  1.将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器 ...

  7. x264报错No working C compiler found.

    现象: 缺少C++部署包 解决 [root@localhost x264]# yum -y install gcc gcc-c++ kernel-devel [root@localhost x264] ...

  8. MySQL表连接原理

    以下文章均来自掘金小测: https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c061b0cf265da612577e0f4 表连接本质: ...

  9. ACWING基础算法(三)

    双指针算法. 相向双指针,指的是在算法的一开始,两根指针分别位于数组/字符串的两端,并相向行走. ACWING 的一道裸题(不知道为啥进不去404):最长连续不重复子序列 输入 5 1 2 2 3 5 ...

  10. <kotlin>基础,杂七杂八(亲测有效)

    okhttp class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) ...