SDNU 1019.礼物(水题)

时间:2019-08-27
本文章向大家介绍SDNU 1019.礼物(水题),主要包括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

Source

#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define eps 1e-9

const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int maxn = 100000 + 8;

struct node
{
    string name;
    int money, sum;
}a[100000 + 8];

int main()
{
    int n, num, mon;
    string name;
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        cin>>a[i].name;
        a[i].sum = 0;
    }
    for(int i = 0; i < n; i++)
    {
        cin>>name;
        cin>>mon>>num;
        for(int j = 0; j < n; j++)
        {
            if(a[j].name == name && num > 0)
            {
                a[j].sum -= (mon / num) * num;///计算一开始负了多少钱
                break;
            }
        }
        for(int j = 0; j < num; j++)
        {
            cin>>name;
            for(int k = 0; k < n; k++)
            {
                if(a[k].name == name)
                {
                    a[k].sum += (mon / num);
                    break;
                }
            }
        }
    }
    for(int i = 0; i < n; i++)
    {
        cout<<a[i].name<<" "<<a[i].sum<<'\n';
    }
    return 0;
}

原文地址:https://www.cnblogs.com/RootVount/p/11419323.html