分析:排序题,sort的使用,建立一个结构,每输入完一组时就对该组进行sort,最后对整个sort即可
#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#define MAX 99999999
using namespace std;
typedef long long ll;
struct stu{
string id;
int score;
int location;
int final_rank,local_rank;
};
int cmp(stu s1,stu s2)
{
if(s1.score != s2.score) return s1.score > s2.score;
return s1.id < s2.id;
}
int main()
{
int n,m;
int cnt = 0;
stu s[30001];
cin>>n;
for(int i = 0;i<n;i++){
cin>>m;
int beg = cnt;
for(int j = 0;j<m;j++){
string s1;
int x;
cin>>s1>>x;
s[cnt].id = s1;
s[cnt].score = x;
s[cnt++].location = i+1;
}
sort(s+beg,s+cnt,cmp);
for(int i = beg;i<cnt;i++){
if(i == beg)
s[i].local_rank = 1;
else{
if(s[i].score == s[i-1].score)
s[i].local_rank = s[i-1].local_rank;
else
s[i].local_rank = i-beg+1;
}
}
}
sort(s,s+cnt,cmp);
for(int i = 0;i<cnt;i++){
if(i == 0)
s[i].final_rank = 1;
else{
if(s[i].score == s[i-1].score)
s[i].final_rank = s[i-1].final_rank;
else
s[i].final_rank = i+1;
}
}
cout<<cnt<<endl;;
for(int i = 0;i<cnt;i++)
cout<<s[i].id<<" "<<s[i].final_rank<<" "<<s[i].location<<" "<<s[i].local_rank<<endl;
return 0;
}