1085. PAT单位排行 (25)(C++)
2018-03-18 22:33
375 查看
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。输入格式:输入第一行给出一个正整数N(<=105),即考生人数。随后N行,每行按下列格式给出一个考生的信息:准考证号 得分 学校其中“准考证号”是由6个字符组成的字符串,其首字母表示考试的级别:“B”代表乙级,“A”代表甲级,“T”代表顶级;“得分”是 [0,100] 区间内的整数;“学校”是由不超过6个英文字母组成的单位码(大小写无关)。注意:题目保证每个考生的准考证号是不同的。输出格式:首先在一行中输出单位个数。随后按以下格式非降序输出单位的排行榜:排名 学校 加权总分 考生人数其中“排名”是该单位的排名(从1开始);“学校”是全部按小写字母输出的单位码;“加权总分”定义为“乙级总分/1.5 + 甲级总分 + 顶级总分*1.5”的整数部分;“考生人数”是该属于单位的考生的总人数。学校首先按加权总分排行。如有并列,则应对应相同的排名,并按考生人数升序输出。如果仍然并列,则按单位码的字典序输出。输入样例:
1 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2
10 A57908 85 Au B57908 54 LanX A37487 60 au T28374 67 CMU T32486 24 hypu A66734 92 cmu B76378 71 AU A47780 45 lanx A72809 100 pku A03274 45 hypu输出样例:5
1 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2
#include<iostream> #include<algorithm> #include<vector> #include<map> #include<string> using namespace std; typedef struct{ float score; int num; string name; }school; int cmp(school a,school b){ if(a.score!=b.score) return a.score>b.score; else if(a.num!=b.num) return a.num<b.num; return a.name<b.name; } int main(){ int n,j=1; cin>>n; std::map<string, int> m; vector<school>v; for(int i=0;i<n;i++){ string s,s1; float score1; cin>>s>>score1>>s1; for(int i2=0;i2<s1.length();i2++){ if(s1[i2]>='A'&&s1[i2]<='Z') s1[i2]=s1[i2]+'a'-'A'; } if(!m[s1]){ m[s1]=j; ++j; school q; q.name=s1;q.score=0;q.num=0; v.push_back(q); } int j2=m[s1]-1; if(s[0]=='T') score1*=1.5; if(s[0]=='B') score1/=1.5; v[j2].score+=score1; v[j2].num++; } for(int i3=0;i3<v.size();i3++){ v[i3].score=(int)v[i3].score; } sort(v.begin(), v.end(),cmp); cout<<v.size()<<'\n'; j=1; for(int k=0;k<v.size();k++){ if(k!=0&&v[k].score==v[k-1].score) cout<<j; else{ cout<<k+1; j=k+1; } cout<<' '<<v[k].name<<' '<<v[k].score<<' '<<v[k].num<<'\n'; } }
相关文章推荐
- 1085. PAT单位排行 (25)+2018_3_24
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25)
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25) PAT乙级真题
- 1085. PAT单位排行 (25)
- 【C++】PAT(advanced level)1056. Mice and Rice (25)
- 【C++】PAT(advanced level)1047. Student List for Course (25)
- 【C++】PAT(advanced level)1032. Sharing (25)
- PAT 1002. A+B for Polynomials (25) c++版
- 【C++】PAT (advanced level)1074. Reversing Linked List (25)
- C++ - PAT - 1025. 反转链表 (25)
- 【C++】浙大PAT (Basic Level)1005. 继续(3n+1)猜想 (25)
- 【c++】PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)*
- 【C++】PAT (advanced level)1060. Are They Equal (25)
- PAT (Advanced Level) Practise 1085 Perfect Sequence (25)
- pat 乙级 1015. 德才论 (25) c++
- 【c++】PAT (Advanced Level)1010. Radix (25)