题意

例如某次考试一共八道题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上了一对括号,里面有个正数b,则表示该学生AC了这道题,耗去了时间a,同时曾经错误提交了b次。AC后之前的错误提交次数会被记录罚时;

input: 输入数据包含多行,第一行是共有的题数n(1≤n≤12)以及单位罚时m(10≤m≤20),之后的每行数据描述一个学生的信息,首先是学生的用户名(不多于10个字符的字串)其次是所有n道题的得分现状,其描述采用问题描述中的数量标记的格式。

output: 根据这些学生的得分现状,输出一个实时排名。实时排名显然先按AC题数的多少排,多的在前,再按时间分的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。每个学生占一行,输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐)。名字、题数和时间分相互之间有一个空格。

思路

  • 声明一个结构体数组存储每一个人的做题情况,结构体的成员name,score,AC_number,time;
  • score为一个string型数组,通过输入格式的判断,将每一个题的得分情况存储在一个string;然后通过暴力读取字符串,将每一科成绩的字符串中的"数字"转化为真正的数字,然后计算相应的罚时
  • 在例如 40(5)这样的得分情况,通过字符串的遍历,将左括号和右括号的位置记录,然后将字符串分为两部分进行数字转化(其实在后续的学习中,可使用sscanf()函数格式化的读取字符串中的数据)

sscanf(s,"%d(%d)",&x,&y);//后续了解(非常简单),此题没有用到,直接暴力解决的

  • 字符串数字转化通过快速读入的方法,直接转化为数字.
  • 负得分和0分是没有必要处理的,只需要判断score[i]的第一位字符是不是’-‘或者’0’.
  • 然后排序的时候使用STL中sort()函数,使用结构体重写比较方法,重载<号,设AC_number为第一关键字,降序;设time为第二关键字,升序,设name为第三关键字,升序;

总结

将输入进行分块读取,然后分块进行处理,非常容易检查,然后如果能使用string定义变量,就不需要用char数组,后者是比较分散的,指针操作容易造成地址访问错误,数组越界,指针悬空等问题.
在流的输出中,如果在一行对齐的话,在同一行使用左对齐之后,记得取消左对齐,然后进行其他对齐;

resetiosflags(ios::left) ;

代码

#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
struct student
{string name;int AC_number;int time_number;bool operator<(const student& s){if (s.AC_number != AC_number) return AC_number > s.AC_number;if (s.time_number != time_number)return time_number < s.time_number;return name < s.name;}
};int main()
{int n, m;cin >> n >> m;string name;string* score = new string[n];int ii = 0;struct student s1[1000];while (cin >> name){for (int i = 0; i < n; i++)cin >> score[i];s1[ii].name = name;s1[ii].AC_number = 0;s1[ii].time_number = 0;for (int i = 0; i < n; i++){bool temp = false;int  le1=0, ri1=0;for (int j = 0; j < score[i].length(); j++){if (score[i].at(j) == '(') {temp = true;le1 = j;}if (score[i].at(j) == ')') {ri1 = j;}}if (temp){s1[ii].AC_number++;int ans1 = 0, ans2 = 0;for (int j = 0; j < le1; j++)ans1 = ans1 * 10 + (score[i].at(j) - '0');for (int j = le1 + 1; j < ri1; j++)ans2 = ans2 * 10 + (score[i].at(j) - '0');s1[ii].time_number = s1[ii].time_number + ans1 + ans2 * m;}else{if (score[i].at(0) != '-' && score[i].at(0) != '0') {s1[ii].AC_number++;int ans1 = 0;for (int j = 0; j < score[i].length(); j++){ans1 = ans1 * 10 + (score[i].at(j) - '0');}s1[ii].time_number = s1[ii].time_number + ans1;}}}ii++;}sort(s1, s1 + ii);for (int i = 0; i < ii; i++) {cout << setiosflags(ios::left) << setw(10) << s1[i].name << " ";cout << resetiosflags(ios::left)<<setw(2) << s1[i].AC_number << " ";cout << resetiosflags(ios::left) << setw(4) << s1[i].time_number << endl;}return 0;
}

B - 爆零(×)大力出奇迹(√) HDU - 2093相关推荐

  1. B - 爆零(×)大力出奇迹(√) HDU - 2093

    题意: 程序设计思维作业和实验使用的实时评测系统,具有及时获得成绩排名的特点,那它的功能是怎么实现的呢? 我们千辛万苦怼完了不忍直视的程序并提交以后,评测系统要么返回AC,要么是返回各种其他的错误,不 ...

  2. AI:大力出奇迹?Bigger is better?AI下一代浪潮?—人工智能的大语言模型(LLMs)的简介、发展以及未来趋势

    AI:大力出奇迹?Bigger is better?AI下一代浪潮?-人工智能的大语言模型(LLMs)的简介.发展以及未来趋势 目录 人工智能的大语言模型(LLMs)-AI下一代浪潮?Bigger i ...

  3. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  4. pytorch微调bert_小版BERT也能出奇迹:最火的预训练语言库探索小巧之路

    选自Medium 作者:Victor Sanh 机器之心编译 参与:魔王 过去一段时间,大模型层出不穷.在大家纷纷感叹「大力出奇迹」的时候,作为调用预训练语言模型最流行的库,HuggingFace 尝 ...

  5. 2020 计蒜之道 预赛 第一场 爆零记

    爆零记 本来都忘了有这个比赛emmm 然后下午其实也没时间写的样子, 可是一直发短信提醒,, 所以最后还是抽了小半个小时敲了两份模板 但是,,大概是我菜把, 两份都只能过样例.... 而且也调试不出个 ...

  6. 2018NOIp爆零记

    day 0 上午起来,眼睛一睁开就想起来要出发了,心里默默念:相信自己,相信自己... 早上不想颓,于是起来写板子,写着写着就发现近几年的noip会板子没有用啊...该不会白练了一个早上吧... 中午 ...

  7. gdoi2016爆零记

    很对不起老师和同学,这次可真的是全程打酱油了. 赛前立的flag不但没有实现,甚至连体面一点的分数都没有拿到,两天的题目加起来仅仅拿了10分,应该算是倒数. day0: 下午一点从石中坐大巴出发到四会 ...

  8. CSP 复赛爆零指南

    目录 写在前面的话 爆零原因诊断 1.文件夹建立错误 2.没有加文件读写 3.文件夹命名不规范 3.头文件错误 4.注释 5.空间限制 6.测试环境不同 尾声 写在前面的话 感谢@Mars-OJ勰码教 ...

  9. GDKOI2018爆零游记

    GDKOI2018爆0游记 大佬们都在blog上写总结了 但是很高兴yzh大佬的总结里面我的名字出现了三次 不行蒟蒻不能写蒟蒻不能发蒟蒻写不出蒟蒻不能写蒟蒻没得写蒟蒻拒绝写 (发出来会被dalao嘲笑 ...

最新文章

  1. Android数据库 之 SQLite数据库
  2. Cashport助力比特币现金(BCH)进入移动开发时代
  3. shell转换特殊的格式(%b)到时间戳  08/Dec/2016
  4. C# WinForm源码收集
  5. 网络推广外包——网络推广外包专员升级用户使用体验有方法
  6. MyBatisPlus条件构造器实现降序排序的两种方式
  7. python读取配置文件获取所有键值对_python读取配置文件
  8. 小说精品屋plus v2.7.0源码
  9. CSS相邻同胞选择器
  10. C++primer plus第六版课后编程题答案8.6
  11. VB.NET工作笔记002---asp调用vb6编写的activex dll
  12. BZOJ 2019 [Usaco2009 Nov]找工作:spfa【最长路】【判正环】
  13. php devel 5.3.3 26,php-5.3.27安装
  14. php中的 server 2008,window_Windows Server 2008开发指南解析,  Windows Server 2008开发指南中 - phpStudy...
  15. WES7和WES2009的功能比较
  16. 做善良公社项目的经历和感受——善良公社
  17. 【Codeforces Round #695 (Div. 2) B】Hills And Valleys
  18. 篆刻小站之设计与开发
  19. django 重置密码
  20. 借“核高基”东风 打造国产数据库第一品牌

热门文章

  1. java面向对象之对象数组练习“奥特曼打小怪兽混战”
  2. 【Unity3D插件】EasyTouch插件分享《手机摇杆插件》
  3. MySQL的体系结构
  4. 有刷与无刷电机的原理
  5. 用 Python3 OpenCV 将视频转成字符动画
  6. 算法衡量auc_优化AUC两遍学习算法
  7. Datatable删除
  8. 如何知道ajax请求是否结束?
  9. 中国省市区名 MySQL 数据库表[正版]
  10. Eclise IDEA相互导入