#include<bits/stdc++.h>
using namespace std;
struct People {
int in = 0,//收入
num = 0,//抽中红包次数
No;//第几个人
bool operator<(const People& p) {
if (in != p.in)//先按照抽到的红包钱数排名,由大到小
return in > p.in;
if (num != p.num)//如果抽到钱数相同,比较抽到红包次数
return num > p.num;
return No < p.No;//如果上述都相同,比较序号,前者在前,后者在后
}
}v[10000];
int main() {
int N, K, n, p;
cin >> N;//输入多少人数
for (int i = 1; i <= N; i++) {
cin >> K;//输入每次红包个数
v[i].No = i;//开通10000个空间每一个按照一个人算
for (int j = 0; j < K; ++j) {
cin >> n >> p;
v[n].in += p;//n表示第几个人,p抽到的钱数;
v[n].num++;//第n个人抽中红包的次数
v[i].in -= p;//第i个人每次被抽亏多少
}
}
sort(v + 1, v + N + 1);//按照钱数多少排序
for (int i = 1; i <= N; ++i)
printf("%d %.2lf\n", v[i].No, v[i].in * 0.01);
return 0;
}
L2-009 抢红包题解
最新推荐文章于 2024-06-01 18:28:10 发布