0%

PAT A1012 The Best Rank

解题思路

我的思路比较简单,就是写一个结构体,然后包括最好排名和当前排名,还有当前课程代号,然后设置四个比较函数,按照a,c,m,e的顺序挨个算出排名,然后再算下一个的时候进行比较,并不断更新结构体即可!

注意

算法笔记的我就不再复现了,只不过用了一个二维数组来表示排名,然后需要注意cmp比较函数的新用法,里面可以比较数组,传全局参数!!!

1
2
3
4
5
6
7
8
9
10
11
12
struct Stu{
int id;
int grade[4];
}
int now;
bool cmp(Stu a,Stu b){
return a.grade[now]>b.grade[now];
}
for(now=0;now<4;now++){//对结构体数组排序了四次,每次根据不同的参数!!!
sort(stu,stu+n,cmp);

}

我的代码

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=2010;
struct Stu{
string id;
double ave;
int c,m,e,best_rank,cur_rank;
char ch;//课程代码
}stu[maxn];
string strs[maxn];
bool cmp_a(Stu a,Stu b){return a.ave>b.ave;}
bool cmp_c(Stu a,Stu b){return a.c>b.c;}
bool cmp_m(Stu a,Stu b){return a.m>b.m;}
bool cmp_e(Stu a,Stu b){return a.e>b.e;}

int main(){
std::ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>stu[i].id>>stu[i].c>>stu[i].m>>stu[i].e;
stu[i].ave=(double)(stu[i].c+stu[i].m+stu[i].e)/3;
}
for(int i=0;i<m;i++){
cin>>strs[i];
}
sort(stu,stu+n,cmp_a);
stu[0].best_rank=1;stu[0].ch='A';
for(int i=1;i<n;i++){
stu[i].ch='A';
if(stu[i].ave==stu[i-1].ave){
stu[i].best_rank=stu[i-1].best_rank;
}else{
stu[i].best_rank=i+1;
}

}
sort(stu,stu+n,cmp_c);
stu[0].cur_rank=1;
if(stu[0].best_rank>1){
stu[0].best_rank=1;
stu[0].ch='C';
}
for(int i=1;i<n;i++){
if(stu[i].c==stu[i-1].c){
stu[i].cur_rank=stu[i-1].cur_rank;
}else{
stu[i].cur_rank=i+1;
}
if(stu[i].best_rank>stu[i].cur_rank){
stu[i].best_rank=stu[i].cur_rank;
stu[i].ch='C';
}
}
sort(stu,stu+n,cmp_m);
stu[0].cur_rank=1;
if(stu[0].best_rank>1){
stu[0].best_rank=1;
stu[0].ch='M';
}
for(int i=1;i<n;i++){
if(stu[i].m==stu[i-1].m){
stu[i].cur_rank=stu[i-1].cur_rank;
}else{
stu[i].cur_rank=i+1;
}
if(stu[i].best_rank>stu[i].cur_rank){
stu[i].best_rank=stu[i].cur_rank;
stu[i].ch='M';
}
}
sort(stu,stu+n,cmp_e);
stu[0].cur_rank=1;
if(stu[0].best_rank>1){
stu[0].best_rank=1;
stu[0].ch='E';
}
for(int i=1;i<n;i++){
if(stu[i].e==stu[i-1].e){
stu[i].cur_rank=stu[i-1].cur_rank;
}else{
stu[i].cur_rank=i+1;
}
if(stu[i].best_rank>stu[i].cur_rank){
stu[i].best_rank=stu[i].cur_rank;
stu[i].ch='E';
}
}
for(int i=0;i<m;i++){
bool has=false;
for(int j=0;j<n;j++){
if(stu[j].id==strs[i]){
has=true;
cout<<stu[j].best_rank<<" "<<stu[j].ch<<endl;
}
}
if(!has) cout<<"N/A"<<endl;
}
return 0;
}

本文标题:PAT A1012 The Best Rank

文章作者:GavinYGM

发布时间:2020年08月24日 - 17:08

最后更新:2020年08月24日 - 18:08

原始链接:http://www.gavinygm.cn/2020/08/24/PAT-A1012-The-Best-Rank/

许可协议: 转载请保留原文链接及作者。