Source:

PAT A1137 Final Grading (25 分)

Description:

For a student taking the online course "Data Structures" on China University MOOC (http://www.icourse163.org/), to be qualified for a certificate, he/she must first obtain no less than 200 points from the online programming assignments, and then receive a final grade no less than 60 out of 100. The final grade is calculated by 0 if G​mid−term​​>G​final​​, or G​final​​ will be taken as the final grade G. Here G​mid−term​​ and G​final​​ are the student's scores of the mid-term and the final exams, respectively.

The problem is that different exams have different grading sheets. Your job is to write a program to merge all the grading sheets into one.

Input Specification:

Each input file contains one test case. For each case, the first line gives three positive integers: P , the number of students having done the online programming assignments; M, the number of students on the mid-term list; and N, the number of students on the final exam list. All the numbers are no more than 10,000.

Then three blocks follow. The first block contains P online programming scores G​p​​'s; the second one contains M mid-term scores G​mid−term​​'s; and the last one contains N final exam scores G​final​​'s. Each score occupies a line with the format: StudentID Score, where StudentID is a string of no more than 20 English letters and digits, and Score is a nonnegative integer (the maximum score of the online programming is 900, and that of the mid-term and final exams is 100).

Output Specification:

For each case, print the list of students who are qualified for certificates. Each student occupies a line with the format:

StudentID G​p​​ G​mid−term​​ G​final​​ G

If some score does not exist, output "−" instead. The output must be sorted in descending order of their final grades (G must be rounded up to an integer). If there is a tie, output in ascending order of their StudentID's. It is guaranteed that the StudentID's are all distinct, and there is at least one qullified student.

Sample Input:

6 6 7
01234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
missing 400
ydhfu77 99
wehu8 55
ydjh2 98
dx86w 88
a1903 86
01234 39
ydhfu77 88
a1903 66
01234 58
wehu8 84
ydjh2 82
missing 99
dx86w 81

Sample Output:

missing 400 -1 99 99
ydjh2 200 98 82 88
dx86w 220 88 81 84
wehu8 300 55 84 84

Keys:

  • 快乐模拟
  • map(C++ STL)
  • string(C++ STL)

Attention:

  • 四舍五入要用round()函数;
  • MAXSIZE最多有三倍的1E4;
  • 从总分计算公式可以看出来,不参加期末考试,最多拿40分,是不会得到证书的

Code:

 /*
Data: 2019-08-07 20:05:38
Problem: PAT_A1137#Final Grading
AC: 32:45 题目大意:
获得证书需要,编程任务不少于200分,总分不少于60分
如果期中>期末分数,则总分=期中*0.4+期末*0.6
反之,总分=期末分数
输入:
第一行给出,完成编程的人数P,参加期中考试的人数M,参加期末考试的人数N,均<=1e4
接下来给出各项分数;id不超过20位
*/
#include<cstdio>
#include<string>
#include<map>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=1e4+;
int pt=;
struct node
{
string id;
int gp,gm,gf,g;
}info[M],temp;
map<string,int> mp;
vector<node> ans; int Hash(string s)
{
if(mp[s]==)
mp[s]=pt++;
return mp[s];
} bool cmp(const node &a, const node &b)
{
if(a.g != b.g)
return a.g > b.g;
else
return a.id < b.id;
} int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("Test.txt", "r", stdin);
#endif // ONLINE_JUDGE int n,m,p;
scanf("%d%d%d", &p,&m,&n);
for(int i=; i<p; i++)
{
temp = node{"",-,-,-,-};
cin >> temp.id >> temp.gp;
if(temp.gp<)
continue;
int pos = Hash(temp.id);
info[pos]=temp;
}
for(int i=; i<m; i++)
{
cin >> temp.id >> temp.gm;
if(mp[temp.id]==)
continue;
int pos = mp[temp.id];
info[pos].gm = temp.gm;
}
for(int i=; i<n; i++)
{
cin >> temp.id >> temp.gf;
if(mp[temp.id]==)
continue;
int pos = mp[temp.id];
info[pos].gf = temp.gf;
if(info[pos].gf >= info[pos].gm)
info[pos].g = info[pos].gf;
else
info[pos].g = (int)round((0.4)*info[pos].gm+(0.6)*info[pos].gf);
if(info[pos].g >= )
ans.push_back(info[pos]);
}
sort(ans.begin(),ans.end(),cmp);
for(int i=; i<ans.size(); i++)
printf("%s %d %d %d %d\n", ans[i].id.c_str(),ans[i].gp,ans[i].gm,ans[i].gf,ans[i].g); return ;
}

/*Data: 2019-08-07 20:05:38Problem: PAT_A1137#Final GradingAC: 32:45
题目大意:获得证书需要,编程任务不少于200分,总分不少于60分如果期中>期末分数,则总分=期中*0.4+期末*0.6反之,总分=期末分数输入:第一行给出,完成编程的人数P,参加期中考试的人数M,参加期末考试的人数N,均<=1e4接下来给出各项分数;id不超过20位*/#include<cstdio>#include<string>#include<map>#include<cmath>#include<vector>#include<iostream>#include<algorithm>using namespace std;const int M=1e4+10;int pt=1;struct node{    string id;    int gp,gm,gf,g;}info[M],temp;map<string,int> mp;vector<node> ans;
int Hash(string s){    if(mp[s]==0)        mp[s]=pt++;    return mp[s];}
bool cmp(const node &a, const node &b){    if(a.g != b.g)        return a.g > b.g;    else        return a.id < b.id;}
int main(){#ifdef ONLINE_JUDGE#else    freopen("Test.txt", "r", stdin);#endif // ONLINE_JUDGE
    int n,m,p;    scanf("%d%d%d", &p,&m,&n);    for(int i=0; i<p; i++)    {        temp = node{"",-1,-1,-1,-1};        cin >> temp.id >> temp.gp;        if(temp.gp<200)            continue;        int pos = Hash(temp.id);        info[pos]=temp;    }    for(int i=0; i<m; i++)    {        cin >> temp.id >> temp.gm;        if(mp[temp.id]==0)            continue;        int pos = mp[temp.id];        info[pos].gm = temp.gm;    }    for(int i=0; i<n; i++)    {        cin >> temp.id >> temp.gf;        if(mp[temp.id]==0)            continue;        int pos = mp[temp.id];        info[pos].gf = temp.gf;        if(info[pos].gf >= info[pos].gm)            info[pos].g = info[pos].gf;        else            info[pos].g = (int)round((0.4)*info[pos].gm+(0.6)*info[pos].gf);        if(info[pos].g >= 60)            ans.push_back(info[pos]);    }    sort(ans.begin(),ans.end(),cmp);    for(int i=0; i<ans.size(); i++)        printf("%s %d %d %d %d\n", ans[i].id.c_str(),ans[i].gp,ans[i].gm,ans[i].gf,ans[i].g);
    return 0;}

PAT_A1137#Final Grading的更多相关文章

  1. PAT 1137 Final Grading[一般][排序]

    1137 Final Grading(25 分) For a student taking the online course "Data Structures" on China ...

  2. A1137. Final Grading

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  3. PAT A1137 Final Grading (25 分)——排序

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  4. PAT 甲级 1137 Final Grading

    https://pintia.cn/problem-sets/994805342720868352/problems/994805345401028608 For a student taking t ...

  5. 1137 Final Grading (25 分)

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  6. PAT 1137 Final Grading

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  7. PAT甲级——A1137 Final Grading【25】

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  8. 1137 Final Grading

    题意:排序题. 思路:通过unordered_map来存储考生姓名与其成绩信息结构体的映射,成绩初始化为-1,在读入数据时更新各个成绩,最后计算最终成绩并把符合条件的学生存入vector,再排序即可. ...

  9. PAT甲级目录

    树(23) 备注 1004 Counting Leaves   1020 Tree Traversals   1043 Is It a Binary Search Tree 判断BST,BST的性质 ...

随机推荐

  1. [bzoj4530][Bjoi2014]大融合_LCT

    大融合 bzoj-4530 Bjoi-2014 题目大意:n个点,m个操作,支持:两点连边:查询两点负载:负载.边(x,y)的负载就是将(x,y)这条边断掉后能和x联通的点的数量乘以能和y联通的点的数 ...

  2. [poj1363]Rails_模拟_栈

    Rails poj-1363 题目大意:判断一个序列是否是1~n的合法出栈序列. 注释:$1\le n\le 10^4$. 想法:开始想到一种想法. 对于一段序列来讲,显然从首元素开始的连续小于尾元素 ...

  3. Linux轻松一下——cowsay命令,让动物说话

    Linux动物说话命令 使用方法 安装命令:sudo apt-get install cowsay 使用命令:cowsay hello 查看可选动物 cowsay -l 使用其他动物 cowsay - ...

  4. [Node.js] Add Logging to a Node.js Application using Winston

    Winston is a popular logging library for NodeJS which allows you to customise the output, as well as ...

  5. TinyAdmin前端展现框架

    一直在苦苦寻找一个合适的前端框架,少说也看了几十个. ext太重.并且有内存泄露,在IE下就是个悲剧. dhtmlx,速度比較好,开源是GPL不适合企业应用,商业的要钱,倒也不贵万把块钱,可是样式比較 ...

  6. iOS - 社会化分享-微信分享,朋友圈分享

    我仅仅做了文字和图片分享功能 1. TARGETS - Info - URL Types identifier -> weixin URL Schemes ->  应用id 2.在AppD ...

  7. oc32--构造方法1

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int ag ...

  8. C# SuperWebSocket服务端、客户端学习(三)

    1.打开VS2012,新建一个windows窗体程序,选择.NET4.0版本 2.添加引用 SuperSocket的dll文件( SuperSocket.Common.dll, SuperSocket ...

  9. 【HDU 6162】 Ch’s gift

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6162 [算法] 离线树剖 我们知道,u到v路径上权值为[A,B]的数的和 = u到v路径上权值小于 ...

  10. B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque

    deque真的秀,queue和stack...没啥用了啊.操作差不多,就是在前面加一个front||back_就行了. 题干: 题目描述 题目描述     约翰的N只奶牛(编为1到N号)正在直线上排队 ...