天梯赛 L2 抢红包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccDLlyy/article/details/79943269

题目链接:点击打开链接

思路:注意一个坑就行,不光抢到红包的人有收获,一个人发掉的红包,要从自己的钱数里扣掉。

#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;
}


猜你喜欢

转载自blog.csdn.net/ccDLlyy/article/details/79943269