题意:每个人的钱尽可能多的花掉,剩下的当做自己的收入.题目求得是每个人的纯收入,即1.从朋友那里得到的加上自己剩余的.2.如果朋友为0(没有送给任何人),则这部分钱不算自己的收入.
注意:每个输入组的数据要用一个空行隔开,但是不能单纯的在每组数据输入之后才打印空行,要在除了第一组之前答应空行.
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using namespace std;
struct Node
{
string name;
int give;
int rest;
int friends;//朋友数量
int friends_num[100];//保存朋友的下标
};
int main()
{
int num;
bool flag = false;
while(cin >> num)
{
if(flag)
cout << endl;
else
flag = true;
int i,j,k,m;
Node person[10];
string name;
for(i = 0;i < num;i++)
{
cin >> person[i].name;
}
for(i = 0;i < num;i++)
{
cin >> name;
for(j = 0;j < num;j++)
{
if(name == person[j].name)
{
cin >> person[j].give;
cin >> person[j].friends;
break;
}
}
for(m = 0;m < person[j].friends;m++)
{
cin >> name;
for(k = 0;k < num;k++)
{
if (name == person[k].name)
{
person[j].friends_num[m] = k;
break;
}
}
}
}
for(i = 0;i < num;i++)
{
if(person[i].friends == 0)
{
person[i].rest = 0;
}
else
{
person[i].rest = person[i].give % person[i].friends;
}
}
for(i = 0;i < num;i++)
{
if(person[i].friends)
{
for(j = 0;j < person[i].friends;j++)
{
person[person[i].friends_num[j]].rest += (person[i].give / person[i].friends);
}
}
}
for(i = 0;i < num;i++)
{
if(person[i].friends == 0)
{
cout << person[i].name <<" "<< person[i].rest << endl;
}
else
{
cout << person[i].name <<" "<< person[i].rest - person[i].give << endl;
}
}
}
return 0;
}