PAT 1137

题目 : Final Grading

分值 : 25
难度 : 中等题
思路 : 用 map<string , Node>形式存,但这里要排序,使用sort的话,先要将所有的key-value装入
       vector<PAIR> vec 中; typedef pair<string,Node> PAIR ;
       vec.push_back( make_pair(itea->first , itea->second )) ;
坑点 : 仔细读题,是总评 <60不输出 而不是期末 < 60不输出

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
typedef struct Node
{
string name ;
int Gp =-1;
int Gmid_term = -1 ;
int Gfinal = -1;
int G;
}Nodes ;
map <string , Node> db;
map<string , Node>:: iterator itea ;
typedef pair<string ,Node> PAIR ;
vector<PAIR> vec ;
bool cmp(const PAIR& a , const PAIR & b)
{
if(a.second.G != b.second.G)
return a.second.G > b.second.G ;
return a.second.name < b.second.name ;
}

int main() {
int p , m , n ;
cin >> p >> m >> n ;
string name ;
int value ;
for(int i = 0 ; i< p+m+n ; i++)
{
cin >> name >> value;
if(i<p)
{
db[name].name = name ;
db[name].Gp = value ;
}
else if(i<p+m)
{
db[name].name = name ;
db[name].Gmid_term = value ;
}
else
{
db[name].name = name ;
db[name].Gfinal =value ;
}
}
for(itea =db.begin(); itea != db.end() ; itea ++)
{
if(itea->second.Gmid_term > itea->second.Gfinal)
{
double result = 0.4*itea->second.Gmid_term + 0.6 *itea->second.Gfinal ;
itea->second.G = result + 0.5 ;
}
else
itea->second.G = itea->second.Gfinal ;
vec.push_back( make_pair(itea->first, itea->second )) ;
}
sort(vec.begin(), vec.end() , cmp) ;
for(int i = 0 ; i< vec.size( ) ; i++)
{
if(vec[i].second.Gp < 200 || vec[i].second.G <60 ) continue ;
cout <<vec[i].second.name<<" "<<vec[i].second.Gp <<" "<<vec[i].second.Gmid_term <<" "<<vec[i].second.Gfinal<<" "<<vec[i].second.G <<endl ;
}
}