题解 P1201 【[USACO1.1]贪婪的送礼者Greedy Gift Givers】

· · 题解

程序截图与运行结果:http://lvyanchao0.blog.163.com/album/#m=2&aid=273239275&pid=9701836579

# include <stdio.h>
# include <string.h>
int main()
{
    struct gift                                                //定义互赠礼物者结构体gift
    {
        char name[15];
        signed money;
    } giver[10];
    int NP,p,q,m,NGi,r;
    char give[15],receive[15];
    scanf("%d",&NP);                                        //共有NP个人互赠礼物
    for(p=0;p<NP;p++)
    {
        scanf("%s",giver[p].name);                            //各个人的名字为name
        giver[p].money=0;                                    //各个人的净收益为money
    }
    while(p--)
    {
        scanf("%s",give);                                    //名为give的送礼者
        scanf("%d %d",&m,&NGi);                                //准备了现金m,要送给NGi个人
        for(q=0;q<NP && NGi;q++)
            if(!strcmp(give,giver[q].name))                    //找到该送礼者
            {
                m/=NGi;                                        //将其所准备的现金m平均分配
                while(NGi--)
                {
                    scanf("%s",receive);                    //给名为receive的收礼者
                    for(r=0;r<NP;r++)
                        if(!strcmp(receive,giver[r].name))    //找到该收礼者
                        {
                            giver[r].money+=m;                //该收礼者将获得m的净收益
                            giver[q].money-=m;                //该送礼者将失去m的净收益
                        }
                }
            }
    }
    while(++p<NP)
        printf("%s %d\n",giver[p].name,giver[p].money);        //输出互赠礼物后各人的净收益
    return 0;
}