题解 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;
}