首页 > 学院 > 开发设计 > 正文

抢红包

2019-11-08 01:00:04
字体:
来源:转载
供稿:网友
抢红包  

没有人没抢过红包吧…… 这里给出NN个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。

输入格式:

输入第一行给出一个正整数NN(/le 10^4≤10​4​​),即参与发红包和抢红包的总人数,则这些人从1到NN编号。随后NN行,第ii行给出编号为ii的人发红包的记录,格式如下:

K/quad N_1/quad P_1/quad /cdots/quad N_K/quad P_KKN​1​​P​1​​⋯N​K​​P​K​​

其中KK(0 /le K /le 200≤K≤20)是发出去的红包个数,N_iN​i​​是抢到红包的人的编号,P_ip​i​​(>0>0)是其抢到的红包金额(以分为单位)。注意:对于同一个人发出的红包,每人最多只能抢1次,不能重复抢。

输出格式:

按照收入金额从高到低的递减顺序输出每个人的编号和收入金额(以元为单位,输出小数点后2位)。每个人的信息占一行,两数字间有1个空格。如果收入金额有并列,则按抢到红包的个数递减输出;如果还有并列,则按个人编号递增输出。

输入样例:

103 2 22 10 58 8 1255 1 345 3 211 5 233 7 13 8 1011 7 88002 1 1000 2 10002 4 250 10 3206 5 11 9 22 8 33 7 44 10 55 4 21 3 88002 1 23 2 1231 8 2504 2 121 4 516 7 112 9 10

输出样例:

1 11.632 3.638 3.633 2.117 1.696 -1.679 -2.1810 -3.265 -3.264 -12.32
#include <iostream>#include <cstdio>#include <cmath>#include <queue>#include <stack>#include <map>#include <algorithm>#include <vector>#include <string>#include <cstring>#include <sstream>using namespace std;int n;struct DATA{    int id;    int v;    int num;};typedef struct DATA DATA;DATA p[10005];int cmp(DATA x,DATA y){    if(x.v==y.v)    {        if(x.num==y.num)        {            return x.id<y.id;        }        return x.num>y.num;    }    return x.v>y.v;}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        p[i].id=i;        p[i].v=p[i].num=0;    }    for(int i=1;i<=n;i++)    {        int k;        scanf("%d",&k);        int sum=0;        for(int j=0;j<k;j++)        {            int ID,M;            scanf("%d%d",&ID,&M);            sum+=M;            p[ID].v+=M;            p[ID].num+=1;        }        p[i].v-=sum;    }    sort(p+1,p+n+1,cmp);    for(int i=1;i<=n;i++)    {        PRintf("%d %.2f/n",p[i].id,p[i].v*0.01);    }    return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表