YTU---1402-Greedy Gift Gives貪欲な贈り物者

2467 ワード

1402: 1.1.2 Greedy Gift Gives貪欲な贈り物者
Time Limit: 1 Sec  
Memory Limit: 64 MB
Submit: 31  
Solved: 17
[ Submit][ Status][ Web Board]
Description
お互いに贈り物をしなければならない友达に対して、TRWは一人一人が受け取ったお金よりいくら多いかを確定しなければならない.この問題では、誰もが贈り物をするためにお金を用意していますが、これらのお金は彼の贈り物を受け取る人に平均的に分けられます.しかし、どのグループの友达の中にも、多くの贈り物(多くの友达がいるからかもしれません)を送る人もいれば、多くのお金を用意している人もいます.友達のグループをあげて、誰も名前が14文字に会長していないで、一人一人が贈り物に使うお金をあげて、彼の贈り物を受け取る人のリストをあげて、一人一人が受け取ったお金より多い数を確定してください.
Input
第1行:人数NP,2<=NP<=10第2からJ+1行:このNPのグループにいる人の名前1つの名前1行第J+2から最後:ここのI段の内容はこのように組織されています:第1行は贈り物人の名前を送ります.2行目には2つの数字が含まれています.1つ目は元のお金の数(0から2000の範囲内)で、2つ目のNGiはこの人の贈り物を受け取る人の数です.もしNGiがゼロでなければ、次のNGiの列に贈り物を出す受取人の名前、1行です.
Output
出力NP行は行ごとに1つの名前にスペースを加え、送信したお金よりも多くの金額を受け取る.各人について、彼の名前の印刷順序は、入力した2〜NP+1行に入力した順序と同じであるべきである.すべての贈り物のお金は整数です.一人一人が同じ数のお金を贈り物をする友达にあげ、できるだけ多くあげて、与えられないお金を贈り物者本人の収入部分に入れます.
Sample Input
5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0

Sample Output
dave 302
laura 66
owen -359
vick 141
amr -150

HINT
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <string>
using namespace std;

struct peo
{
    string name;
    int ownmoney;
} p[11];
int main()
{
    int n;
    int i,j,k,l,num;
    int money;
    string cname;
    while(cin>>n)
    {
        for(i=0; i<n; i++)
        {
            cin>>p[i].name;
            p[i].ownmoney=0;
        }
        for(i=0; i<n; i++)
        {
            cin>>cname;
            for(j=0; j<n; j++)
            {
                if(p[j].name==cname)
                    break;
            }
            cin>>money>>num;
            if(money>0)
            p[j].ownmoney-=(money-money%num);

            for(k=0; k<num; k++)
            {
                cin>>cname;
                for(l=0; l<n; l++)
                {
                    if(p[l].name==cname)
                        break;
                }
                p[l].ownmoney+=money/num;
            }
        }
        for(i=0; i<n; i++)
            cout<<p[i].name<<" "<<p[i].ownmoney<<endl;
    }
    return 0;
}