SDNU 1019

Description
圣诞节快到了,同学们每个人都准备了一定的钱用来买礼物。已知每个人送礼物的时候都会把自己准备的钱平均分成自己要送的人数份,送给自己的好友,剩余的钱留在自己手中。同时,也会收到若干份礼物。
现在,LG统计了一下每个人送礼的情况,想请你计算一下大家赔了还是赚了。
Input
第1行一个整数N(0<N<=100),表示人数;
第2行至第N + 1每行一个长度小于50的字符串,表示每个人的名字;
其后N段,每段第一行为人名;
每段第二行为两个整数Si(0<=Si<=10000),Ki(0<=Ki<M),表示这个人准备的用于送礼的钱数和他要送的好友数;
每段其余Ki行每行一个人名,表示要送给的好友。
Output
共N行,按照输入第2至第N + 1行给定的顺序输出人名及每个人赚了多少(若赔了则输出负数)
Sample Input
3
LG
SYC
WZ
LG
55 2
SYC
WZ
SYC
100 0
WZ
77 2
LG
SYC
Sample Output
LG -16
SYC 65
WZ -49

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

struct zbl
{
    char name[55];
    int zhichu;
    int shouhui;
    int sum;
} a[105];

int main()
{
    int n,i;
    cin>>n;
    for(i=0; i<n; i++)
    {
        scanf("%s",&a[i].name);
    }
    for(int j=0; j<n; j++)
    {
        char s[55];
        scanf("%s",s);//谁出钱

        int doller,num;
        scanf("%d%d",&doller,&num);//出多少钱,均分给多少人

        for(int k=0; k<i; k++)//出钱的损失多少
        {
            if(strcmp(s,a[k].name)==0)
            {
                if(num==0)
                    a[k].zhichu+=0;
                else a[k].zhichu+=(doller/num)*num;
//                cout<<a[k].name<<"的支出"<<a[k].zhichu<<endl;
                break;
            }
        }

        char b[55];
        for(int k=0; k<num; k++)//谁收钱,收多少,num控制循环次数
        {
            scanf("%s",b);
            for(int l=0; l<i; l++)//i保证所有起始人名都遍历到
            {
                if(strcmp(b,a[l].name)==0)
                {
                    if(num==0)
                        a[l].shouhui+=0;
                    else a[l].shouhui+=doller/num;
//                    cout<<a[l].name<<"的收回"<<a[l].shouhui<<endl;
                }
            }
        }
    }
    for(int m=0; m<n; m++)
    {
        a[m].sum=a[m].shouhui-a[m].zhichu;
        cout<<a[m].name<<" "<<a[m].sum<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaobaole2018/article/details/84294704