top1编程
← 返回题目
题解

【基础】贪婪的送礼者Greedy Gift Givers(USACO1.1)

1 条题解

  • 0
    @ 2026-7-29 0:18:21
    #include <iostream>
    #include <string>
    using namespace std;
    
    struct Person {
        string name;
        int sent;
        int received;
    } p[15];
    
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> p[i].name;
            p[i].sent = 0;
            p[i].received = 0;
        }
        for (int i = 0; i < n; i++) {
            string s;
            int money, num;
            cin >> s >> money >> num;
            for (int j = 0; j < n; j++) {
                if (s == p[j].name && num!= 0) {
                    p[j].sent = money - money % num;
                    break;
                }
            }
            for (int j = 0; j < num; j++) {
                string receiver;
                cin >> receiver;
                for (int k = 0; k < n; k++) {
                    if (receiver == p[k].name) {
                        p[k].received += money / num;
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < n; i++) {
            cout << p[i].name << " " << p[i].received - p[i].sent << endl;
        }
        return 0;
    }
    
    • 1