题目https://zhanglong.blog.csdn.net/article/details/112971582
我的代码
#include<bits/stdc++.h>
using namespace std;
struct school{
string name;
double score=0;//带小数的精确分数
int scoref;//将成绩保留整数部分
int num=0;//人数
};
int cmp(school s1,school s2)
{
if(s1.scoref!=s2.scoref) return s1.scoref>s2.scoref;//降序
else{
if(s1.num!=s1.num) return s1.num<s2.num;//升序
else return s1.name<s2.name;
}
}
int main()
{
vector<school> v;
int n,i;
cin>>n;
map<string,school>a;
for(i=0;i<n;i++)
{
string stuid,sid;//分别为准考证号、学校
double fen;//得分
cin>>stuid>>fen>>sid;
transform(sid.begin(),sid.end(),sid.begin(),::tolower);
if(stuid[0]=='B') fen/=1.5;
if(stuid[0]=='T') fen*=1.5;
a[sid].score+=fen;
a[sid].num++;
}
for (map<string, school>::iterator iter = a.begin(); iter != a.end(); ++iter) {
iter->second.scoref=(int)iter->second.score;
v.push_back(iter->second);
v.back().name=iter->first;
}
cout<<v.size()<<endl;
sort(v.begin(),v.end(),cmp);
int z=1;//辅助标记排名
cout<<z<<' '<<v[0].name<<' '<<v[0].scoref<<' '<<v[0].num<<endl;
for(i=1;i<v.size();i++) {
if(v[i].scoref==v[i-1].scoref)
cout<<z<<' '<<v[i].name<<' '<<v[i].scoref<<' '<<v[i].num<<endl;
else{
cout<<i+1<<' '<<v[i].name<<' '<<v[i].scoref<<' '<<v[i].num<<endl;
z=i+1;
}
}
}
运行结果
左边是正确答案,右边是我的,求问为啥分数一样的时候人数排反了呀T T,我真的看不出来了