PAT1137
题意
- 一个学生的成绩由上机,期中,期末共3部分构成,现要求找出有资格获得证书的同学们。
- 证书获得者要求:上机分至少200,最终成绩及格。
- 最终成绩的生成规则:若期中分>期末分,则f = 期中 * 0.4 + 期末 * 0.6。否则期末分就是最终成绩。
- 注,学生某项成绩可能会缺失。
分析
- 学生人数可能达到3W,别以为只是1W! P+M+N<=30000。略坑,搞得我老段错误。
- 学生可能没有分数,这得处理,分析期中和期末的情况即可。
- 学生的最终成绩计算公式涉及浮点,直接round解决(其实题意round up 应该是上整的意思)。
- 规则应该是没有冲突的。
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
struct Student
{
string name;
int p, m, n, f;
Student(string name=""): name(name), p(-1), m(-1), n(-1), f(-1){};
};
map<string,int> mapp;
vector<Student> students;
void TestAndSet(string name)
{
if(mapp.find(name)==mapp.end())
{
mapp[name] = students.size();
students.push_back(Student(name));
}
}
int cmp(int a, int b)
{
if(students[a].f==students[b].f)
return students[a].name < students[b].name;
return students[a].f > students[b].f;
}
int main()
{
//freopen("input.txt", "r", stdin);
int P,M,N;
while(cin>>P>>M>>N)
{
mapp.clear();
string name;
char buf[32];
int score;
while(P--)
{
scanf("%s%d", buf, &score);
name = buf;
TestAndSet(name);
students[mapp[name]].p = score;
}
while(M--)
{
scanf("%s%d", buf, &score);
name = buf;
TestAndSet(name);
students[mapp[name]].m = score;
}
while(N--)
{
scanf("%s%d", buf, &score);
name = buf;
TestAndSet(name);
students[mapp[name]].n = score;
}
vector<int> vect;
for(int i=0; i<students.size(); i++)
{
if(students[i].p<200) continue; // 上机分数低
else if(students[i].n<0) continue; // 无期末分数
else
{
if(students[i].m<=students[i].n)
students[i].f = students[i].n;
else
students[i].f = round(students[i].m * 0.4 + students[i].n * 0.6);
if(students[i].f>59) vect.push_back(i);
}
}
sort(vect.begin(), vect.end(), cmp);
for(int i=0; i<vect.size(); i++)
{
// 名字 上机 期中 期末 总分
Student tmp = students[vect[i]];
printf("%s %d %d %d %d\n",
tmp.name.c_str(), tmp.p, tmp.m, tmp.n, tmp.f);
}
}
return 0;
}
PAT1137的更多相关文章
随机推荐
- kvm重新命名
1.停止虚拟机 virsh shutdown wcltest3 2.导出虚拟机的配置文件 cd /etc/libvirt/qemu virsh dumpxml wcltest3 > vnc.xm ...
- PostgreSQL 存储过程/函数
1.有用的链接 postgresql 常用小函数 Postgresql数据库的一些字符串操作函数 PostgreSQL function里面调用function PostgreSQL学习手册(函数和操 ...
- 设定计划的SMART原则
SMART: Specific,Measurable, Attainable,Result-based, Time-based 设定计划,如果不去执行,设定目标,而不去实现,那也算是背叛自己的诺言,终 ...
- 搭建 flask 应用
参考文档:http://docs.jinkan.org/docs/flask/quickstart.html#a-minimal-application 1.使用Pycharm创建Flask应用 fr ...
- docker(3)docker下的centos7下安装jdk
1.将jdk-8u65-linux-x64.tar.gz文件传到docker的宿主机上 rz 2.将宿主机上的jdk-8u65-linux-x64.tar.gz复制到centos7的容器下 #在宿主机 ...
- 分布式事务框架-fescar
https://github.com/alibaba/fescar/wiki/%E6%A6%82%E8%A7%88?spm=5176.11156381.0.0.b9f85ceegUXvCC
- SQL Server外部链接时报错:Error locating serverInstance specified
SQL Server外部链接时报错:Error locating server/Instance specified 连接时报错信息: 08001 sql server network interfa ...
- java——变量
1.静态变量: 随着类的加载而生成并初始化 随着类的消失而消失 2.成员变量: 随对象的加载而生成并初始化 随对象被回收而消失 3.局部变量: 作用范围由{}决定 随方法调用而创建 随方法的执行完毕而 ...
- python面向对象实例
——王宇阳 总结 (Code_boy)2018年11月16日 class Person: name='xxx' age=20 p=Person() #p为实例对象 print(p.name,p.age ...
- free -m命令输出详解
free -m输出有3行: Mem:表示物理内存 -/+ buffers/cached:表示物理内存缓存 Swap:表示硬盘交换分区 其中Mem中的total.used.free.shared.buf ...