解题思路:用结构体来存储每个人的编号和抢的个数以及总数额,最后用sort函数排序即可
#include<bits/stdc++.h>
using namespace std;
typedef struct Person{
int num;//编号
int sum=0;//收入,把初始值设为0,防止有脏数据
int count=0;//抢到红包的个数
};
bool cmp(Person a,Person b){
if(a.sum != b.sum)
return a.sum > b.sum;
else if(a.count != b.count)
return a.count > b.count;
else
return a.num < b.num;
}
int main(){
int N,k,num1;
int money;
cin>>N;
Person p[N];
for(int i=0;i<N;i++){
cin>>k;
p[i].num=i+1;
for(int j=1;j<=k;j++){
cin>>num1>>money;
p[num1-1].sum+=money;
p[num1-1].count++;
p[i].sum-=money;
}
}
sort(p,p+N,cmp);
for(int i=0;i<N;i++){
double temp = (double)(p[i].sum * 1.0 / 100);
printf("%d %.2lf\n", p[i].num,temp);
}
}
运行结果: