用了一些奇妙的方法 注释比较详细
#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <tuple>
const int MAX_N = 1e4 + 5;
using namespace std;
int main()
{
int N;
cin >> N;
vector<tuple<int, int, int>> v(N + 1);
for (int i = 1; i <= N; i++)
{
int m;
cin >> m;
get<0>(v[i]) = i;
int flag[MAX_N] = {0};
while (m--)
{
int id, money;
cin >> id >> money;
if (flag[id] == 1)
continue;
get<1>(v[id]) += money;
get<1>(v[i]) -= money;
get<2>(v[id])++;
flag[id] = 1;
}
}
auto cmp = [](tuple<int, int, int> &e1, tuple<int, int, int> e2) {
return tie(get<1>(e2), get<2>(e2), get<0>(e1)) < tie(get<1>(e1), get<2>(e1), get<0>(e2));
};
sort(v.begin(), v.end(), cmp);
for (int i = 0; i <= N; ++i)
{
if (get<0>(v[i]) == 0)
continue;
cout << get<0>(v[i]) << ' ' << fixed << setprecision(2) << 1.0 * get<1>(v[i]) / 100 << endl;
}
return 0;
}