解题报告:

题目描述:写一个程序给一个编程考试C++实时提交系统排名,给你的数据是题目的总数,每次错误提交罚的时间分,每位用户的姓名,然后是输入用户每题的完成情况,有一下几种情况,第一,输入只有一个正值,表示该题只有一次提价记录,且已经AC了,第二,有一个正值,并且,正值后面有一个括号,括号里面有一个数字,前面的正值表示AC该题所用的时间,后面括号里面的数表示总共有多少次错误的提交记录,第三,只有一个负数,表示该题提交了这个负数的绝对值次,但还没有AC,第四,只有一个0,表示该题没有提交记录,对于每一题,如果已经AC了,但是有错误的提交记录,就要将每一次错误的提交记录都罚一定的时间,并且算进总的用时里面。要你给这个比赛结果进行排名,要求是首先按照AC的题数,AC题多的人排前面,如果AC的题目数量相同,则按照总的用时,用时少的人排前面,如果AC题数跟用时都相同的话,按照名字的字典序排列。

一个模拟题,就是对输入的处理比较麻烦,可以在每次输入一个做题情况时,将输入先做一个预处理,先判断有没有括号。然后还要注意的就是如果有错误的提交但是到最后没有AC,则该题不罚时。输出的时候注意最后没有换行,不然就PE。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> typedef int INT;
struct node {
char name[]; int n; //记录过的题数
int sTime; //记录总的时间
node() {
n = sTime = ; //将时间和题数初始化
}
};
bool cmp(node a,node b) { //排序函数
if(a.n>b.n)
return true;
else if(a.n<b.n)
return false;
else if(a.n == b.n) {
if(a.sTime<b.sTime)
return true;
else if(a.sTime>b.sTime)
return false;
else if(a.sTime == b.sTime) {
if(strcmp(a.name,b.name)==-)
return true;
else return false;
}
}
} int main( ) {
int n,p; //p表示做错一题罚的时间分
scanf("%d%d",&n,&p);
char str[];
node stu[];
int num = ;
while(scanf("%s",str)!=EOF) {
strcpy(stu[num].name,str);
for(int i = ;i<n;++i) {
scanf("%s",str);
int len = strlen(str);
int flag = ,l1,l2;
for(int j = ;j<len;++j) { //先做一遍预处理,判断是否存在括号,
if(str[j] == '(') { //如果存在,记录前括号跟后括号的位置
flag = ;
l1 = j;
}
if(str[j] == ')')
l2 = j;
}
if(!flag) { //对于没有括号的情况的处理
if(atoi(str)>) {
stu[num].n++;
stu[num].sTime+=atoi(str);
}
}
else { //对于有括号的情况的处理
char str1[],str2[];
int s1 = ;
for(;s1<l1;++s1)
str1[s1] = str[s1];
str1[s1] = NULL;
s1 = ;
for(;s1<l2-l1-;++s1)
str2[s1] = str[s1+l1+];
str2[s1] = NULL;
stu[num].n++;
stu[num].sTime+= atoi(str1)+p*atoi(str2);
}
}
num++; //学生数加一
}
std::sort(stu,stu+num,cmp);
for(int i = ;i<num;++i)
printf("%-10s %2d %4d\n",stu[i].name,stu[i].n,stu[i].sTime);
//%号后加-表示左对齐 ,注意输出后不换行
return ;
}

HDU 2093 考试排名 模拟题的更多相关文章

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

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

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

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

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

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

  4. HDU 1262 寻找素数对 模拟题

    题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数. 题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数. ...

  5. [考试]NOIP2015模拟题2

    // 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...

  6. HDU 2521 反素数 模拟题

    解题报告:水题,直接附上代码,只是觉得这题的作者是不是吃饱了饭撑的,反素数的概念跟这题一点关系都没有. #include<cstdio> int judge1(int k) { ; ;i& ...

  7. HDU 1256 画8 模拟题

    解题报告:这题我觉得题目有一个没有交代清楚的地方就是关于横线的字符的宽度的问题,题目并没有说,事实上题目要求的是在保证下面的圈高度不小于上面的圈的高度的情况下,横线的宽度就是等于下面的圈的高度. #i ...

  8. HDU 4022 Bombing STL 模拟题

    人工模拟.. #include<stdio.h> #include<iostream> #include<algorithm> #include<vector ...

  9. hdu 4515 年月份模拟题

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

随机推荐

  1. RN热更新

    说白了集成RN业务,就是集成RN离线包,解析并渲染.所以,RN热更新的根本原理就是更换js bundle文件和资源文件,并重新加载,新的内容就完美的展示出来了. 目前市场上出现的3种热更新模式如下:仅 ...

  2. 20135234mqy-——信息安全系统设计基础第十三周学习总结

    第十一章 网络编程 11.1 客户端-服务器编程模型 基本操作:事务 当一个客户端需要服务时,向服务器发送一个请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户 ...

  3. TUANDUIZUOYE

     [组队后的项目整体计划安排]  - 学习:先学习基础知识,懂得该做什么,后边做边学,在实践中成长: - 项目:根据迭代原则,先完成较简单的功能,而后进攻较难功能,保证项目的最终完成度.  阶段序列  ...

  4. visual studio-2013之单元测试

    安装个vs把一个寝室搞得欲仙欲死的,,已经安装好了vs2013,那些欲仙欲死的事就都不说了.开始我们的正式作业——单元测试. 要做单元测试前提有: 1.要有Unit Test Generator工具 ...

  5. 微信小程序简易table组件实现

    前提:微信小程序自1.6.3基础库版本库开始支持简洁组件,之前的版本因不支持,故在引用组件处默认为空节点.关于微信小程序已有模板为何还需构建组件?一是因为组件可以更方便的自定义并绑定行为,二是在其他页 ...

  6. 『编程题全队』alpha阶段项目复审

    小组的名字和链接 优点 缺点,bug 报告 最终名次 Gakki赛高 (1)支持注册账号和账号管理(2) 支持自动登录,提供便捷性(3)题目不重复且题目答案准确(4)支持排行榜统计功能(5)自己设计算 ...

  7. k8s kubectl edit 方式修改 nodeport 的端口

    0. 买了一本 每天五分钟玩转 k8s 还有 刚才转帖的blog 里面有一个 kubectl edit 的语法能够在线更改端口号 ,之前一直没弄明白. 刚才做了下实验.发现很好用 这里记录一下. 1. ...

  8. OpenCV学习(23) 使用kmeans算法实现图像分割

          本章我们用kmeans算法实现一个简单图像的分割.如下面的图像,我们知道图像分3个簇,背景.白色的任务,红色的丝带以及帽子.       Mat img = cv::imread(&quo ...

  9. 【大数据】SparkCore学习笔记

    第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可 ...

  10. BZOJ2648 SJY摆棋子(KD-Tree)

    板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...