P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

Posted zhangrunqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers相关的知识,希望对你有一定的参考价值。

P1201题库链接:https://www.luogu.org/problem/P1201

难度:普及-

算法标签:模拟

1.map映射模拟 O(np*m) 得分100

由于最近做的map题比较多,所以马上就想到了map做法,嗑了快一个小时,终于写出了正解,输入时用s数组记录人名的顺序,方便输出,并建立两个map,分别表示每个人收到的钱(get)和送出的钱(put),利用人名(string)作为map的Key值。当送出礼物时,让give[giver]加上送出的每个礼物的价值(注意价值是整数,需要下取整) * 人数,表示送出礼物所花费的钱;当收到礼物时,让get[geter]不断加上所收到的礼物的价值,即为所收到礼物的总价值。最后输出时,依次输出用每个人收到礼物的价值减去送礼物花费的钱,即为他收到的钱比送出的钱多的数目

 1 #include <iostream>
 2 #include <cmath>
 3 #include <map>
 4 using namespace std;
 5 map<string, int> get;
 6 map<string, int> give;
 7 string s[11];
 8 int main()
 9 
10     int np;
11     cin >> np;
12     for(int i = 0; i < np; ++i)
13     
14         cin >> s[i];
15         get[s[i]] = 0;
16         give[s[i]] = 0;
17     
18     for(int i = 1; i <= np; ++i)
19     
20         int m, e;
21         double n;
22         string giver;
23         cin >> giver >> n >> m;
24         e = floor(n / m);
25         give[giver] += e * m;
26         for(int j = 1; j <= m; ++j)
27         
28             string geter;
29             cin >> geter;
30             get[geter] += e;
31         
32     
33     for(int i = 0; i < np; ++i)
34         cout << s[i] <<   << get[s[i]] - give[s[i]] << endl;
35     return 0;
36  

以上是关于P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers的主要内容,如果未能解决你的问题,请参考以下文章

P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

洛谷P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

P1201-[USACO1.1]贪婪的送礼者Greedy Gift Givers

贪婪的送礼者Greedy Gift Givers

贪婪的送礼者 USACO 培训计划中的执行错误 [关闭]