【HDU - 2093】 考试排名(排序+格式输出)

题干:

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

题目分析:

    题目不难但是小细节很多。。。还有一点就是 光wa不ac的情况竟然不算罚时。。。。

ac代码:

#include <cstdio>
#include <cstring>
#include <iostream> 
#include <algorithm>
const int MAX = 10000 + 5;
using namespace std;struct Node {char name[15];int sumtime;int ac;} node[MAX];bool cmp(Node a, Node b) {if(a.ac!=b.ac) return a.ac>b.ac;if(a.sumtime!=b.sumtime) return a.sumtime<b.sumtime;return !strcmp(a.name,b.name);}
int main()
{int n,penalty,num=0;char tmps[15];int tmp;int len;scanf("%d %d",&n, &penalty);while(~scanf("%s",node[num].name) ) {node[num].ac=node[num].sumtime=0;for(int i = 0; i<n; i++) {tmp=0;//待定 scanf("%s",tmps); len=strlen(tmps);printf("ttttttttttttmps=%s************%d\n",tmps,len) ;if(tmps[0]=='0') {printf("tmps[0]=='0'跳过 \n");continue;}if(tmps[0]=='-') {printf("负号 \n");
//					tmp=0;
//					for(int j = 1;j<len; j++) tmp=tmp*10+tmps[j]-'0';
//					node[num].sumtime+=tmp*penalty;
//					printf("tmp=%d  sumtime=%d\n",tmp,node[num].sumtime);continue;}node[num].ac++;if(strstr(tmps,"(")==NULL ) {printf("没有括号 \n");tmp=0;for(int j = 0; j<len; j++) {tmp=tmp*10+tmps[j]-'0';}node[num].sumtime+=tmp;printf("tmp=%d  sumtime=%d\n",tmp,node[num].sumtime);continue;}//剩下的情况就只有包含'('的了printf("有括号 \n");int pos=strstr(tmps,"(")-tmps;tmp=0;for(int j = 0; j<pos; j++) {tmp=tmp*10+tmps[j]-'0';} node[num].sumtime+=tmp; printf("tmp=%d  sumtime=%d\n",tmp,node[num].sumtime);tmp=0;int ppos=strstr(tmps, ")" ) -tmps;for(int j = pos+1; j<ppos; j++) {tmp=tmp*10+tmps[j]-'0';}node[num].sumtime+=tmp*penalty; printf("tmp=%d  sumtime=%d\n",tmp,node[num].sumtime);}num++;}sort(node,node+num,cmp);for(int i=0; i<num; i++) {printf("%-10s%3d%5d\n",node[i].name,node[i].ac,node[i].sumtime);}return 0 ;
}
/*8 20
a -1 -16 8 0 0 120 39 0
b 116 -2 11 0 0 82 55(1) 0
c 72(3) 126 10 -3 0 47 21(2) -2
d 0 -1 -8 50(235) 0 0 0 0
e -2 67(2) 13 -1 0 133 79(1) -1
f 0 0 57(5) 0 0 168 -7 0*/
/*
c           5  376
b           4  284
e           4  352
a           3  167
f           2  325
d           1 4750
*/


总结:

    注意一下别忘初始化变量,会表示按照格式输出。左对齐右对齐


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 实现将网络资源保存到本地

/// <summary>/// 单个文件保存从对方服务器到自己网站/// </summary>/// <param name"aUrl"></param>/// <param name"aPath"></param>/// <returns></returns>[HttpGet]public string FileSave(string …

【sdut 1751】 区间覆盖问题

区间覆盖问题Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description设x1 , x2 ,…… , xn 是实直线上的n 个点。用固定长度的闭区间覆盖这n 个点&#xff0c;至少需要多少个这样的固定长度闭区间?对于给定的实直线上的n个点和闭区间的长…

C# 读取根目录的json文件中的某个值

/// <summary>/// 读取JSON文件/// </summary>/// <param name"key">JSON文件中的key值</param>/// <returns>JSON文件中的value值</returns>public string Readjson(string key){//获取winform应用根目录string jsonfile Appl…

【nyoj 47】 过河问题(思维)

过河问题时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;5描述在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话&#xff0c;大家是无论如何也不敢过桥去的。不幸的是&#xff0c;N个人一共只带了一只…

layui数据表格循环数据给特殊行变颜色遇到的bug

数据表格加载玩数据后&#xff0c;进行颜色区分&#xff0c;然后再进行排序&#xff0c;发现颜色变化有bug 原因&#xff1a; //其中res.data数据并没有变化&#xff0c;只是渲染数据顺序发生了变化&#xff0c;这时候&#xff0c;如此循环便会出现问题 $.each(res.data, fun…

贪心策略--16经典问题总结!

贪心算法编号题目1货郎担问题&#xff1a;货郎担问题&#xff1a;假定有五个城市&#xff0c;已知费用矩阵如下&#xff0c;分别从五个城市出发&#xff0c;然后选取一条费用最小的线路&#xff0c;验证这种算法不能得到最优解。贪心选择&#xff1a;每次选择之前没有走过的费用…

网站前端组织冒泡事件

判断event.stopPropagation();是否可行&#xff0c;不行再使用window.event.cancelBubble true;

【nyist】6 喷水装置(一) (简单的贪心)

喷水装置&#xff08;一&#xff09;时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述现有一块草坪&#xff0c;长为20米&#xff0c;宽为2米&#xff0c;要在横中心线上放置半径为Ri的喷水装置&#xff0c;每个喷水装置的效果都会让以它为…

layui数据表格获取当前页数

$(".layui-laypage-em").next().html()

最大素因子(不是题目!自己写着玩的。。。)

话不多说直接上代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int res[10000]; int cnt; long long su[100000000]; bool isprime[200000000]; void prime() {memset(isprime,1,sizeof(isprime));cnt1;isprime[0]isprime[1]0;for(i…

.net core 5 IIS Api网站部署需要注意(同.net 6)

应用程序池&#xff1a;.net clr 版本&#xff1a;无托管代码 2.安装.NET Core SDK和AspNetCoreModule托管模块 此工具要在官网直接下载即可

【HDU - 2087】 剪花布条(直接模拟 or KMP)

题干&#xff1a; 一块花布条&#xff0c;里面有些图案&#xff0c;另有一块直接可用的小饰条&#xff0c;里面也有一些图案。对于给定的花布条和小饰条&#xff0c;计算一下能从花布条中尽可能剪出几块小饰条来呢&#xff1f; Input输入中含有一些数据&#xff0c;分别是成…

从客户端*****中检测到有潜在危险的 Request.Form 值。

MVC前端调用后台控制器方法报错 解决方案&#xff1a; //在控制器方法前添加以下修饰 [ValidateInput(false)]

【九度oj 1135】【OpenJ_Bailian - 2915】 字符串排序 (水)

题干&#xff1a; 先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束&#xff0c;每个字符串少于一百个字符。如果在输入过程中输入的一个字符串为“stop”&#xff0c;也结束输入。 然后将这输入的该组字符串按每个字符串的长度&#xff0c;由小到…

webapi自宿主设置本地端口使用https协议

首先&#xff0c;你要申请证书&#xff0c;然后导入到证书里面&#xff1a; 具体步骤&#xff1a;运行–MMC命令&#xff0c;进入如下界面进行设置&#xff1a; 一直点下一步直到完成&#xff0c;然后将证书导入到个人里面 这个时候进入cmd程序运行如下命令&#xff1a; /…

C# linq Expression left join如何使用

eg&#xff1a; 注意&#xff1a;on 前后要保持字段名一致 var bleftQuery from f in bFamiliesjoin a in bAudits on new{Idf.Id,DCYIdf.ModifyID} equals new{Ida.HealthFamilyId,a.DCYId} into nafrom a in na.DefaultIfEmpty()select new FamilyWithAudit(){Id f.Id,Sea…

第九届(2018)蓝桥杯 山东省赛解题报告(题目+分析+代码)

1标题&#xff1a;第几天 2000年的1月1日&#xff0c;是那一年的第1天。那么&#xff0c;2000年的5月4日&#xff0c;是那一年的第几天&#xff1f; 注意&#xff1a;需要提交的是一个整数&#xff0c;不要填写任何多余内容。 【答案】&#xff1a;125 2标题&#xff1a;明码 …

layui 数据表格 日期格式化

<div>{{ layui.util.toDateString(d.CARDDATE, "yyyy-MM-dd HH:mm:ss") }}</div>

浏览器自带的前进后退按钮禁用

jQuery(document).ready(function () {if (window.history && window.history.pushState) {$(window).on(popstate, function () {/// 当点击浏览器的 后退和前进按钮 时才会被触发&#xff0c; window.history.pushState(forward, null, );window.history.forward(1);…

【HDU - 1241】Oil Deposits (连通块问题 属于求大海中的岛屿个数 类似问题)

题干&#xff1a; The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It t…