UVA 119.Greedy Gift Givers

来源:互联网 发布:java 多线程返回结果 编辑:程序博客网 时间:2024/06/05 03:19

题意:每个人的钱尽可能多的花掉,剩下的当做自己的收入.题目求得是每个人的纯收入,即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;elseflag = 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; }


原创粉丝点击