题目链接:点击打开链接
思路:注意一个坑就行,不光抢到红包的人有收获,一个人发掉的红包,要从自己的钱数里扣掉。
#include <bits/stdc++.h>
using namespace std;
struct node{
int id,cnt;
double money;
node(int a,int b,double c):id(a),cnt(b),money(c){}
bool operator<(const node &b)const{
if(fabs(money - b.money) > 1e-7){
return money > b.money;
}
else if(cnt != b.cnt){
return cnt > b.cnt;
}
else{
return id < b.id;
}
}
};
map<int,int> m1,m2;
vector<node> v;
int main(){
int n,k;
int num,sum;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%d",&k);
int t = 0;
for(int j = 0;j < k;j++){
scanf("%d%d",&num,&sum);
m1[num]++;
m2[num] += sum;
t += sum;
}
if(m1.find(i) == m1.end()){
m1[i] = 0;
}
m2[i] -= t;
}
for(map<int,int>::iterator it = m1.begin();it != m1.end();it++){
v.push_back(node(it->first,it->second,(double)m2[it->first]/100.0));
}
sort(v.begin(),v.end());
for(int i = 0;i < v.size();i++){
printf("%d %.2f\n",v[i].id,v[i].money);
}
return 0;
}