一道简单的排序题,对于排序后名次的问题,如果当前的分数>前面学生的分数,则将当前学生的名次记为i+1(于循环变量有关),否则如果相等,则等于前面学生的名次
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
string name;
int score;
int m;
node(){
m=1;
}
};
bool cmp(node a,node b)
{
if(a.score>b.score)return true;
if(a.score==b.score&&a.name<b.name)return true;
return false;
}
vector<node> vc;
int main()
{
int n,G,k,sum=0;
cin>>n>>G>>k;
node t;
for(int i=0;i<n;i++)
{
cin>>t.name>>t.score;
if(t.score>=60&&t.score<G)
sum+=20;
else if(t.score>=G)
sum+=50;
// if(t.score<60)continue;
vc.push_back(t);
}
cout<<sum<<endl;
sort(vc.begin(),vc.end(),cmp);
cout<<vc[0].m<<' '<<vc[0].name<<' '<<vc[0].score<<endl;
for(int i=1;i<n;i++)
{
if(vc[i].score<vc[i-1].score)
vc[i].m=i+1;
else
vc[i].m=vc[i-1].m;
if(vc[i].m<=k)
cout<<vc[i].m<<' '<<vc[i].name<<' '<<vc[i].score<<endl;
else
break;
}
}