问题标题: 酷町堂:2556 发红包 (模拟)

0
0
已解决
李乐凡
李乐凡
新手光能
新手光能

大神求解!!!

2556   发红包

题目描述 Description

过年了,亲戚之间在拜年的时候会顺便发个红包表达对对方的祝福。现在在一个家族里,有的亲戚之间比较熟络,会发红包问候。现在每个亲戚都列出了一份自己要去发红包的亲戚的名单,并且准备了一笔用于发红包的钱平均发给名单上的亲戚,每一家都会得到金额为整数的红包,不够分的金额就不发出去。在给出每一家亲戚的名字以及他要发红包的名单上亲戚的名字的情况下,计算最终每家最终净赚的钱。

输入描述 Input Description

第一行,一个整数n,表示亲戚的人数(2≤n≤10)
接下来n行,每行一个字符串,表示一个亲戚的名字
接下来n段,每段若干行,组织方式如下:
第一行是一个字符串,表示一个亲戚的名字
第二行是他准备用来发红包的钱数s(0≤s≤2000),以及被他发红包的亲戚总数m,以一个空格隔开
接下来m行,每行一个字符串,表示被他发红包的亲戚的名字

输出描述 Output Description

n行,每行有一个亲戚的名字和他净赚的钱
按照输入中第2到n+1行中亲戚的名字的顺序输出

样例输入 Sample Input

 

5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0

样例输出 Sample Output

 

dave 302
laura 66
owen -359
vick 141
amr -150

数据范围及提示 Data Size & Hint

每个亲戚发出的每个红包的钱均为整数,并且每个红包里的钱塞得尽可能多


0
已采纳
高梓荣
高梓荣
新手天翼
新手天翼

问一下sout数组是干嘛的?

我不是这样写的,你的函数都对,大循环需要改一改

for(int i=0;i<n;i++)
{
        cin>>b;
        k=Find(b);
        cin>>a[k].out>>m;
        for(int j=1;j<=m;j++)
        {
            cin>>b;
            t=Find(b);
            a[t].in+=a[k].out/m;
        }
        if(m!=0)a[k].out=a[k].out-a[k].out%m;
        else a[k].out=0;
}

最后把第二个输出改为a[i].in-a[i].out

望采纳~

0
0
王光裕
王光裕
资深光能
资深光能

 

 

 

把你的第30行上调,到第27行下。

0
王霁月
王霁月
新手守护
新手守护

if(m != 0) {

 

a[k].out = s;

 

a[t].in += s / m;

 

}

 

else {

 

a[k].out = 0;

这一段要放在for循环的外面

 

我要回答