很简单的一道模拟题,使用map统计每个用户的钱数和红包数,最后在使用结构体存储,重载小于号,sort排序即可。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 510;
const int mod = 998244353;
struct box{
int id;
int money;
int cnt;
bool operator<(const box &t) const{
if(money == t.money && cnt == t.cnt){
return id < t.id;
}else if(money == t.money && cnt != t.cnt ){
return cnt > t.cnt;
}
return money > t.money;
}
};
void solve() {
int n;
cin>>n;
map<int,int> mp;//每个人抢到的红包金额
map<int,int> cnt; //红包个数
for(int i = 1;i <= n ; i++){
int k;
cin>>k;
int sum = 0;
for(int j = 1 ; j <= k ; j++){
int x,y;
cin>>x>>y;
sum += y;
mp[x] += y;
cnt[x]++;
}
mp[i] -= sum;
}
vector<box> a(n+1);
for(int i = 1;i <= n ; i++){
a[i].id = i;
a[i].money = mp[i];
a[i].cnt = cnt[i];
}
// for(auto it : mp){
// cout<<it.first<<" "<<it.second<<endl;
// }
sort(a.begin()+1,a.end());
for(int i = 1;i <= n ; i++){
printf("%d %.2f\n",a[i].id,a[i].money *1.0 / 100);
}
}
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt = 1;
// cin >> tt;
while (tt--) {
solve();
}
return 0;
}