B - 爆零(×)大力出奇迹(√)
题目
某次考试一共八道题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上了一对括号,里面有个正数b,则表示该学生AC了这道题,耗去了时间a,同时曾经错误提交了b次。例子可见下方的样例输入与输出部分。
Input
输入数据包含多行,第一行是共有的题数n(1≤n≤12)以及单位罚时m(10≤m≤20),之后的每行数据描述一个学生的信息,首先是学生的用户名(不多于10个字符的字串)其次是所有n道题的得分现状,其描述采用问题描述中的数量标记的格式,见上面的表格。
Output
根据这些学生的得分现状,输出一个实时排名。实时排名显然先按AC题数的多少排,多的在前,再按时间分的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。每个学生占一行,输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐)。名字、题数和时间分相互之间有一个空格。数据保证可按要求的输出格式进行输出。
Sample Input
8 20
GuGuDong 96 -3 40(3) 0 0 1 -8 0
hrz 107 67 -3 0 0 82 0 0
TT 120(3) 30 10(1) -3 0 47 21(2) -2
OMRailgun 0 -99 -8 0 -666 -10086 0 -9999996
yjq -2 37(2) 13 -1 0 113(2) 79(1) -1
Zjm 0 0 57(5) 0 0 99(3) -7 0
Sample Output
TT 5 348
yjq 4 342
GuGuDong 3 197
hrz 3 256
Zjm 2 316
OMRailgun 0 0
思路
数据结构:
struct student:记录每个学生姓名、ac数、罚时信息
char a[15] :保存每次录入的一个学生的一个题的成绩情况
解法
step0 重载student结构体的比较运算符使其满足排序规律
step1 接收学生的姓名,若未接收到姓名则转到step3
step2 用scanf("%s",a);count=sscanf(a,"%d(%d)",&x,&y);接收step1中学生的做题情况,当count为2时累加ac题数和罚时,当count为1时判断数的正负,为正时累加相应的ac题数和罚时 转到step2继续执行
step3 对student调用sort函数进行排序,用 printf("%-10s %2d %4d\n",s[j].name,s[j].ac,s[j].time);输出最终的排序结果
总结
1、判断字典序:return strcmp(this->name,s.name)<0;
2、scanf的返回值为录入变量的数量,记录一下用法:
scanf("%s",a); count=sscanf(a,"%d(%d)",&x,&y);
3、记录一个更好的解法:
代码
#include<iostream> #include<string.h> #include<algorithm> using namespace std; struct student { char name[20]; int ac=0; int time=0; bool operator<(const student &s) const//按照排序规则重载比较函数 { if(this->ac!=s.ac) return this->ac>s.ac; if(this->time!=s.time) return this->time<s.time; return strcmp(this->name,s.name)<0; } }s[1000]; int main() { int n,m,x,y,count; char a[15]; cin>>n>>m; int i=0; while(~scanf("%10s",s[i].name)) { s[i].ac=0; s[i].time=0; // cout<<s[i].name<<endl; for(int j=0;j<n;j++) { scanf("%s",a); count=sscanf(a,"%d(%d)",&x,&y); if(count==2) { s[i].ac++; s[i].time+=x+y*m; } else if(count==1&&x>0) { s[i].ac++; s[i].time+=x; } } // getchar(); i++; } sort(s,s+i); for(int j=0;j<i;j++) printf("%-10s %2d %4d\n",s[j].name,s[j].ac,s[j].time); return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
- WEEK2 实验B 爆零(×)大力出奇迹(√)
- 大力再出奇迹,1024 张TPU,65536 batch size,仅76分钟训练完BERT!
- B - 爆零(×)大力出奇迹(√) HDU - 2093
- B-爆零(x)大力出奇迹(√)
- spring-boot-starter大力出奇迹
- 【程序设计思维与实践 Week2 实验B】 爆零(×)大力出奇迹(√)
- 程序设计思维与实践 Week2 实验 (3/4/数据班) B - 爆零(×)大力出奇迹(√)
- 程序设计思维与实践 Week2 实验:B - 爆零(×)大力出奇迹(√)
- 爆零(×)大力出奇迹(√)(week2 实验B)
- 程序设计第一次训练题 B大力出奇迹
- Manthan, Codefest 16 H. Fibonacci-ish II 大力出奇迹 莫队 线段树 矩阵
- B - 爆零(×)大力出奇迹(√) HDU - 2093
- 【程序设计思维与实践 week2 实验题】爆零(×)大力出奇迹(√)
- 爆零(×)大力出奇迹(√)-模拟题(原题HDU-2093考试排名)
- 大力出奇迹!怪力少女竟被修仙病弱美男子强压!
- 【Week2实验 B】爆零(×)大力出奇迹(√) 【暴力】
- 实验week2 B - 爆零(×)大力出奇迹(√)
- 【20200228程序设计思维与实践 Week2 实验】B - 爆零(×)大力出奇迹(√)
- 程序设计Week2实验——B - 爆零(×)大力出奇迹(√)
- 还我一个奇迹——记僵尸3的遗憾和美丽