代码如下:
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e4 + 10;
struct Node
{
int val; //金额
int cnt; //数量
int id; //编号
} e[N];
int n;
bool cmp(Node a, Node b) //比较函数
{
if (a.val == b.val && a.cnt == b.cnt)
return a.id < b.id;
if (a.val == b.val)
return a.cnt > b.cnt;
return a.val > b.val;
}
int main()
{
cout << fixed << setprecision(2);
cin >> n;
for (int i = 1; i <= n; i++)
e[i].id = i; //初始化编号
for (int i = 1; i <= n; i++) //第i个人发红包
{
int num;
cin >> num;
for (int j = 1; j <= num; j++)
{
int nn;
double pp;
cin >> nn >> pp;
e[i].val -= pp; //第i个人的金额减
e[nn].cnt++; //收到的红包的人的数量加
e[nn].val += pp; //收到的红包的人的金额加
}
}
sort(e + 1, e + n + 1, cmp);
for (int i = 1; i <= n; i++)
{
cout << e[i].id << " " << double(e[i].val) / 100.0 << endl;
}
}
L2-009抢红包
题目大意:每个人都会发红包,也会抢红包,求最后按照得到的红包金额排序,如果金额一样,按照收到红包的数量来,最后数量一样就按编号排序。
文章为作者独立观点,不代表股票交易接口观点