这个题比较简单 用一个结构体就可以解决了
#include <bits/stdc++.h>
using namespace std;
struct list1{
int pos;
int money;
int total;
}person[10010];
int n,k;
int num,p;
bool cmp(list1 a,list1 b){
if(a.money==b.money && a.total==b.total)
return a.pos<b.pos;
else if(a.money==b.money)
return a.total>b.total;
return a.money>b.money;
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i){//初始化
person[i].pos=i;
person[i].money=0;
person[i].total=0;
}
for(int i=1;i<=n;++i){
cin>>k;
while(k--){
cin>>num>>p;
person[num].money+=p;
person[i].money-=p;
person[num].total++;
}
}
sort(person+1,person+1+n,cmp);
for(int i=1;i<=n;++i){
printf("%d %.2lf\n",person[i].pos,person[i].money*0.01);
}
return 0;
}