【Week2实验 B】爆零(×)大力出奇迹(√) 【暴力】
2020-03-08 16:34
465 查看
题意:
一次考试共n道题(1<=n<=12),单位罚时为m(10<=m<=20)(即交错题目惩罚的时间)。给定每个同学(同学数目不固定,根据EOF判断)每道题的标记,正数表示AC所耗时间,括号内表示错误提交次数,非正数表示没有A掉该题。输入形式如 xingming 96 -3 40(3) 0。要求根据同学的得分现状,输出一个实时排名。排名首先按AC题数排,多的在前,再按时间分的多少排,少的在前,最后按名字的字典序排,小的在前。每个同学占一行,输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐),名字、题数和时间分相互之间有一个空格。
思路:
用结构people来存储同学姓名name、分数string score[13]、答对题数ans和时间分time。bool cmp函数根据所给排序方法进行比较。在main函数中,每当读取一位同学的一个分数,若分数大于0,则答对题,ans++,然后处理时间。若分数中没有’(’,则直接将string转换为int加入到time里;若有’(’,则进行处理,将’(‘之前的时间加入到time里,然后将"()"内的错误次数乘上罚时再加入到time里。
将string转换为int使用到了atoi函数和string类的c_str()函数。后面读取’(‘之前的时间是将每一位string取出,减去’0’,加上原时间*10得到的。
最后输出格式需要用到std::left左对齐,std::right右对齐和setw(10)输出10个字符宽。
总结:
一道暴力模拟题,根据题意写出适当的结构体,然后一步步模拟即可。
代码:
#include <iostream> #include <string> #include <cstdlib> #include <iomanip> #include <algorithm> using namespace std; int n,m; struct people { string name; string *score=new string[13]; int ans; int time; }p[10000]; bool cmp(const people&p1,const people&p2) { if(p1.ans>p2.ans) return true; else if(p1.ans<p2.ans) return false; else { if(p1.time<p2.time) return true; else if(p1.time>p2.time) return false; else { if(p1.name<=p2.name) return true; else return false; } } } int main() { cin>>n>>m; int sum=0; //总人数 while(cin>>p[sum].name) { for(int i=0;i<n;i++) { cin>>p[sum].score[i]; if(p[sum].score[i]>"0") //答对题 { p[sum].ans++; //处理时间 if(p[sum].score[i].find("(")==string::npos) //无() p[sum].time+=atoi(p[sum].score[i].c_str()); else //有() { int thistime=0; //()之前的时间 int index=0; for(;index<p[sum].score[i].size();index++) { if(p[sum].score[i].at(index)=='(') break; else thistime=thistime*10+p[sum].score[i].at(index)-'0'; } p[sum].time+=thistime; thistime=0; //()内的交错次数 for(;index<p[sum].score[i].size();index++) { if(p[sum].score[i].at(index)=='(') continue; else if(p[sum].score[i].at(index)==')') break; else thistime=thistime*10+p[sum].score[i].at(index)-'0'; } p[sum].time+=thistime*m; } } } sum++; } sort(p,p+sum,cmp); for(int i=0;i<sum;i++) { cout<<std::left<<setw(10)<<p[i].name<<" "<<std::right<<setw(2)<<p[i].ans<<" "<<std::right<<setw(4)<<p[i].time<<endl; } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- spring-boot-starter大力出奇迹
- 实验探索openssh(三):如何提升服务安全性,开启秘钥认证防止ssh暴力破解
- HDU4587--TWO NODES(无向图割点,暴力出奇迹)这是我见过的时间最长的题。。。
- coursera Stanford Machine Learning Week6 Ex5机器学习 实验5
- sdutoj 3363 数据结构实验之图论七:驴友计划 (暴力深搜最短路)
- Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!
- 实验二:学习Pikachu之暴力破解(无验证码)
- P1149 火柴棒等式(打表暴力 暴力出奇迹)
- 20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结
- 暴力出奇迹!
- bzoj3140 hnoi2013 消毒(暴力出奇迹)
- coursera Stanford Machine Learning Week3 Ex2机器学习 实验2
- pikachu实验环境配置;初步掌握burpsuite;暴力破解实验演示;SQL注入浅析;
- bzoj1770 USACO NOV09 GOLD 灯(暴力出奇迹)
- 暴力搜索出奇迹— —第一场:答案数据较小
- bzoj1853【scoi2010】幸运数字(暴力出奇迹)
- SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!
- (NOI)打表骗分过样例,暴力枚举出奇迹1.8.22题解
- 大力再出奇迹,1024 张TPU,65536 batch size,仅76分钟训练完BERT!
- 51nod 1001 和为k的数对 暴力出奇迹