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的更多相关文章
随机推荐
- phpSpreadSheet 中 使用的 一些坑
如果是upupw,它 做了 安全限制...将 上传目录 写成 uploadfiles 等 才能 写进去.. 文件路径 也不要有 中文..很有可以能 下载时 找不到路径....这个太坑...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_引用类型和值类型(二)
[引用类型和值类型的区别] //引用类型(由于使用了‘class’) class SomeRef { public Int32 x; } //值类型(由于使用了‘struct’) struct Som ...
- 使用sqlmetal工具自动生成SQL数据库的Linq类文件
第一部:找到sqlmetal.exe. 运行cmd. 执行命令 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5 ...
- 网络流之最大流与最小费用流入门&&模板
理解处 刷题处 模板处 最大流模板 处理重边的+(优化) #include<bits/stdc++.h> using namespace std; ; const int INF = 0x ...
- getResourceAsStream properties
try (InputStream is = getClass().getResourceAsStream("/test.properties")) { Properties pro ...
- ubuntu下用apt-get安装lamp缺少mcrypt , curl
用apt-get安装的LAMP环境,但安装magento报没有mcrypt和curl, 解决方法如下: curl安装: sudo apt-get install curl libcurl3 lib ...
- 逐行创建、读取并写入txt(matlab) && 生成文件夹里文件名的.bat文件
fidin=fopen('C:\Users\byte\Desktop\新建文件夹 (4)\tr4.txt','r'); fidout=fopen('C:\Users\byte\Desktop\新建文件 ...
- Linux学习grep,sed,awk工具的使用
1.grep:根据模式搜索文本并将符合模式的文本显示出来(pattern模式:由文本字符和正则表达式元字符所匹配出来的条件) 注:alias grep='grep --color' -c:打印符合要求 ...
- 爬虫(GET)——add_header()和get_header()
import urllib.request import random url = "http://www.baidu.com/" # 可以是User-Agent列表,也可以是代理 ...
- getElementsByTagName 、 getElementsByName 、getElementById区别
WEB标准下可以通过getElementById(), getElementsByName(), and getElementsByTagName()访问DOCUMENT中的任一个标签: getEle ...