1085. PAT单位排行 (25)+2018_3_24
2018-03-24 16:06
585 查看
1085. PAT单位排行 (25)
时间限制 500 ms内存限制 65536 kB
代码长度限制 8000 B
判题程序 Standard 作者 CHEN, Yue
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。
输入格式:
输入第一行给出一个正整数N(<=105),即考生人数。随后N行,每行按下列格式给出一个考生的信息:
准考证号 得分 学校
其中“准考证号”是由6个字符组成的字符串,其首字母表示考试的级别:“B”代表乙级,“A”代表甲级,“T”代表顶级;“得分”是 [0,100] 区间内的整数;“学校”是由不超过6个英文字母组成的单位码(大小写无关)。注意:题目保证每个考生的准考证号是不同的。
输出格式:
首先在一行中输出单位个数。随后按以下格式非降序输出单位的排行榜:
排名 学校 加权总分 考生人数
其中“排名”是该单位的排名(从1开始);“学校”是全部按小写字母输出的单位码;“加权总分”定义为“乙级总分/1.5 + 甲级总分 + 顶级总分*1.5”的整数部分;“考生人数”是该属于单位的考生的总人数。
学校首先按加权总分排行。如有并列,则应对应相同的排名,并按考生人数升序输出。如果仍然并列,则按单位码的字典序输出。
输入样例:
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<bits/stdc++.h>
using namespace std;
struct AA{
double a;
int b;
};
typedef map<string,AA> msi;
msi m;
struct BB{
string a;
int b,c;
BB(string aa,int bb,int cc):a(aa),b(bb),c(cc){}
BB(){}
void output(){
//cout<<a<<" "<<b<<" "<<c<<endl;
printf("%s %d %d\n",a.c_str(),b,c);
}
};
bool cmp(BB a,BB b){
if(a.b==b.b){
if(a.c==b.c)
return a.a<b.a;
return a.c<b.c;
}
return a.b>b.b;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
char a[15],c[15];double b;
scanf("%s%lf%s",a,&b,c);
double t;
if(a[0]=='A'){
t=b;
}else if(a[0]=='B'){
t=b/1.5;
}else{
t=b*1.5;
}
int len=strlen(c);
for(int i=0;i<len;i++){
c[i]=tolower(c[i]);
}
//if(m.find(c)!=m.end())
// m[c]+=t;
//else
m[c].a+=t;
m[c].b++;
}
int len=m.size();
vector<BB> v(len+1);
printf("%d\n",len);
len=1;
for(auto it=m.begin();it!=m.end();it++)
v[len++]=BB(it->first,(it->second).a,(it->second).b);
sort(v.begin()+1,v.end(),cmp);
v[0].b=-1;
int t=1;
for(int i=1;i<len;i++){
if(v[i-1].b!=v[i].b){
t=i;
}
printf("%d ",t);
v[i].output();
}
}
相关文章推荐
- 1085. PAT单位排行 (25) PAT乙级真题
- 1085. PAT单位排行 (25)
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25)
- 1085. PAT单位排行 (25)(C++)
- 1085. PAT单位排行 (25)
- 1020. Tree Traversals (25)_2018_3_24
- pat 1085 Perfect Sequence (25) 二分查找
- PAT (Advanced Level) Practise 1085-Perfect Sequence (25)
- PAT (Advanced Level) Practise 1085 Perfect Sequence (25)
- 1030. 完美数列(25)PAT乙级&&1085. Perfect Sequence (25)PAT甲级
- PAT 1020. Tree Traversals (25) 根据树的中序与后序,求层序
- PAT (Advanced Level) Practise 1010. Radix (25) C++
- PAT 1070. Mooncake (25)
- PAT 1093. Count PAT's (25)
- pat乙级1060. 爱丁顿数(25)
- 【PAT甲级】1002. A+B for Polynomials (25)
- PAT (Advanced Level) Practise 1052 Linked List Sorting (25)