题目链接:点击查看

题目大意:分别给出a个学生的编程分数,b个学生的期中考试成绩,c个学生的期末考试成绩,有几个规则:

  1. 总评为:

    1. 若期中考试成绩大于期末考试成绩:
    2. 否则:
  2. 合格的定义是编程分数大于等于200并且总评四舍五入后大于等于60
  3. 排序的优先级是:
    1. 先按总评排序
    2. 再按学号排序

满足以上规则的情况下,从大到小输出合格的学生信息

题目分析:思路简单的一道模拟题,就因为这个题目将学号变为了字符串就上升了一个难度,如果是四位或五位的数字的话我们可以直接开结构体然后储存信息,但既然学号变为了字符串,我们就不得不用map映射到结构体上,最后从map导出到vector中方便排序,最后就可以直接输出了,思路简单,但实现起来有点乱(指的是代码看起来比较乱),但身为stl依赖症患者,表示写起来非常顺畅

有个小细节需要注意一下,题目要求合格的人是在四舍五入后大于等于60的人,也就是说一个学生考了59.9分,也是算入合格的名单中的(emmm?如果现实真这样该多好啊),这个小细节对应着测试点3,我们只需要在结构体储存总评的时候用int储存就行了,在计算时四舍五入就是(int)(a+0.5),就行了

然后还有一个小细节,我注意到了但不知道这个题有没有故意挖坑,那就是期中考试和期末考试得了0分的人,本来我是直接想判断一下期中考试的分数是否为0来判断一个人是否参加过期中考试来着,但因为考虑到了这个细节,就将初值都初始化为了-1,这样就万无一失了,还有就是在编程分数那里可以稍微剪一下枝,就是如果编程分数低于200分的同学就不用再进行后续操作了

大概就是这样,直接上代码了:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;struct Node
{int pro;//编程int mid;//期中int fin;//期末int all;//总评Node()//初始化为-1{pro=mid=fin=all=-1;}
};map<string,Node>mp;bool cmp(pair<string,Node> a,pair<string,Node> b)
{if(a.second.all!=b.second.all)//总评降序return a.second.all>b.second.all;return a.first<b.first;//学号升序
}int main()
{
//  freopen("input.txt","r",stdin);int a,b,c;scanf("%d%d%d",&a,&b,&c);while(a--){string s;int num;cin>>s>>num;if(num<200)//剪枝continue;mp[s].pro=num;}while(b--){string s;int num;cin>>s>>num;if(mp[s].pro==-1)//剪枝continue;mp[s].mid=num;}while(c--){string s;int num;cin>>s>>num;if(mp[s].pro==-1)//剪枝continue;mp[s].fin=num;}vector<pair<string,Node>>ans;copy(mp.begin(),mp.end(),back_inserter(ans));//把map扔到vector里for(int i=0;i<ans.size();i++)//按照规则计算总评{if(ans[i].second.mid>ans[i].second.fin)ans[i].second.all=(int)(0.4*ans[i].second.mid+0.6*ans[i].second.fin+0.5);elseans[i].second.all=ans[i].second.fin;}sort(ans.begin(),ans.end(),cmp);//按照规则排序for(int i=0;i<ans.size();i++)//输出{if(ans[i].second.all<60)//若当前学生的总评已经不合格了,及时退出break;printf("%s %d %d %d %d\n",(ans[i].first).c_str(),(ans[i].second).pro,(ans[i].second).mid!=-1?(ans[i].second).mid:-1,(ans[i].second).fin!=-1?(ans[i].second).fin:-1,(ans[i].second).all);}return 0;
}

PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)相关推荐

  1. 【PAT乙】1080 MOOC期终成绩 (25分)

    problem 1080 MOOC期终成绩 (25分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格 ...

  2. 【PAT乙级】1080 MOOC期终成绩 (25 分)

    题目地址 #include<bits/stdc++.h> using namespace std; int n,m,k; struct node {int a,b,c,d; string ...

  3. PAT (Basic Level) 1091 N-自守数(模拟+stl)

    题目链接:点击查看 题目大意:给定一个数K,规定N-自守数的定义为K*K*N的末尾几位数等于K,则称K为N-自守数,比如3*92*92=25392,所以92是一个3-自守数,现在给出一些数,判断其是不 ...

  4. PAT | 1080 MOOC期终成绩 (25分)【附柳神代码】

    1080 MOOC期终成绩 (25分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获 ...

  5. 1080. MOOC期终成绩 (25)-PAT乙级真题

    对于在中国大学MOOC(http://www.icourse163.org/)学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评 ...

  6. 【详细解析】1080 MOOC期终成绩 (25分)_45行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想 ...

  7. 1080 MOOC期终成绩 (25 分) java 题解

    题目描述: 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作 ...

  8. PAT (Basic Level) 1075 链表元素分类(模拟)

    题目链接:点击查看 题目大意:初始时给出一个链表,需要按照要求排序: 当结点中的值为负数时,需要排在最前面 当结点中的值为非负数且小于阈值k时,排在中间 当结点中的值大于阈值k时,排在最后 在整体排序 ...

  9. 1080 MOOC期终成绩 (25 分)

    对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总 ...

最新文章

  1. 前端之旅,正式启航~【前端学习路线图+配套学习视频+师长指点】
  2. MySQL使用concat实现连接
  3. stm32设置内部上拉电阻_不知道STM32的GPIO8种模式如何设置?-------看这里
  4. Spring Batch –用JavaConfig替换XML作业配置
  5. 用手机写代码:基于 Serverless 的在线编程能力探索
  6. php抽奖概率算法(刮刮卡,大转盘)
  7. Windows域控设置客户端禁用运行/cmd命令行【全域策略生效】
  8. Windows消息机制概述
  9. c语言按键实现跳转程序,C语言中的跳转语句
  10. Html5动态桌面,动态桌面软件《Wallpaper Engine》 让你的电脑桌面动起来!
  11. Unity3D Asset文件导出3DMax 可编辑格式
  12. 让国外买家秒回复的询盘模板合集
  13. 华为手机热点无法连接_华为手机热点连不上
  14. 云原生--k8s之pod
  15. 有效地报告自动测试结果
  16. ec11编码器c语言程序,EC11旋转编码器电路和程序
  17. 仙境传说RO守护永恒的爱 炼金脚本
  18. npm install 原理分析
  19. Spring STS 开发IDE下载安装
  20. Xenserver上连接NFS服务器时RPC:portmapperfailure;PRC:Unable to recieve

热门文章

  1. RabbitMQ消息自动重新入队
  2. springboot最佳实践-SpringBoot应用如何编写
  3. 使用Dockerfile构建SpringBoot应用镜像
  4. 什么是顺序一致性呢?
  5. 序列化的高阶认识-绕开 transient 机制的办法
  6. tableau示例超市数据在哪儿_超市运营分析 -- Tableau 实战
  7. 操作系统的线程和进程的区别_进程,线程,协程,有何区别?
  8. 201205阶段二FFmpeg编码
  9. Ubuntu 华为开源镜像站 Mirror
  10. vagrant 配置并启动