USACO/Greedy Gift Givers

USACO/Greedy Gift Givers

Posted by dym on February 15, 2014

本文迁移自老博客,原始链接为 https://seven.blog.ustc.edu.cn/usacogreedy-gift-givers/

np个人之间互送礼物,每个人有自己的送礼对象和拥有的钱数,求最后每个人收到的钱比送出的钱多多少? 解法:直接模拟

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int np;
struct per
{
    string name;
    int num;
    int s;
    int ans;
}gift[10];
int find(string tmp)
{
    for(int i = 0; i < np; i++)
    {
        if(gift[i].name == tmp)
            return i;
    }
}
int main() {
    ofstream fout ("gift1.out");
    ifstream fin ("gift1.in");
    string mem,giver,reciver;
    fin>&t;np;
    for(int i = 0; i < np ;i++ )
    {
        fin>>mem;
        gift[i].name = mem;
        gift[i].num = 0;
    }
    int ini,n;
    for(int i = 0; i < np; i++)
    {
        fin>>giver;
        fin>>ini>>n;
        gift[find(giver)].s = ini;
        if(n != 0)
        {
            int ava = ini/n;
            for(int j = 0; j < n; j++)
            {
                fin>>reciver;
                gift[find(reciver)].num += ava;
            }
            gift[find(giver)].num += (ini - ava * n);
        }
    }
    for(int i = 0; i < np; i++)
    {
         gift[i].ans = gift[i].num - gift[i].s;
    }
    for(int i = 0; i < np; i++)
    {
        fout<<gift[i].name<<" "<<gift[i].ans<<endl;
    }

    return 0;
}