阿克蘇交通建設(shè)局網(wǎng)站軟文推廣文章案例
題目鏈接:P1201 [USACO1.1]貪婪的送禮者Greedy Gift Givers - 洛谷 | 計(jì)算機(jī)科學(xué)教育新生態(tài) (luogu.com.cn)
題目描述
對(duì)于一群 n?個(gè)要互送禮物的朋友,GY 要確定每個(gè)人送出的錢比收到的多多少。在這一個(gè)問題中,每個(gè)人都準(zhǔn)備了一些錢來送禮物,而這些錢將會(huì)被平均分給那些將收到他的禮物的人。 ?
然而,在任何一群朋友中,有些人將送出較多的禮物(可能是因?yàn)橛休^多的朋友),有些人有準(zhǔn)備了較多的錢。 ?
給出一群朋友,沒有人的名字會(huì)長(zhǎng)于 14?字符,給出每個(gè)人將花在送禮上的錢,和將收到他的禮物的人的列表,請(qǐng)確定每個(gè)人收到的比送出的錢多的數(shù)目。
輸入格式
第一行一個(gè)正整數(shù) n,表示人數(shù)。
接下來 n?行,每行一個(gè)字符串表示人名。
接下來有 n?段內(nèi)容,對(duì)于每一段:
第一行是將會(huì)送出禮物人的名字。 ?
第二行包含二個(gè)非負(fù)整數(shù),第一個(gè)是原有的錢的數(shù)目 ( ∈?[0,2000]?),第二個(gè) gi?是將收到這個(gè)人禮物的人的個(gè)數(shù) 如果 gi ≠?0, 在下面 gi?行列出禮物的接受者的名字,一個(gè)名字一行。
輸出格式
輸出共 n?行,每行輸出一個(gè)人的名字和該人收到的錢比送出的錢多的數(shù)目。名字的順序應(yīng)該與輸入第 2 行至 n+1?行的順序相同。
送出的錢永遠(yuǎn)是整數(shù),即假設(shè)送禮人一次向 m?人送出 n 元,每個(gè)人應(yīng)該得到??n/m? 元。剩余未送出的錢應(yīng)返還給送禮者。
樣例 #1
樣例輸入 #1
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
樣例輸出 #1
dave 302
laura 66
owen -359
vick 141
amr -150
提示
【數(shù)據(jù)范圍】 ?
1 <= n <= 10
題目翻譯來自NOCOW。
USACO Training Section 1.1
AC code:(模擬 + 字符串 + 哈希表)
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>using namespace std;int main()
{int n;cin>>n;vector<string> orginqueue;unordered_map<string,pair<int,int>> mp;string s;for(int i = 0 ; i < n ; i ++){cin>>s;orginqueue.push_back(s);mp[s] = {0,0};}int a,b;for(int i = 0 ; i < n ; i ++){cin>>s;cin>>a>>b;if(b == 0) // 此處注意,防止出現(xiàn)除數(shù)為0的情況continue;mp[s].first += a;int x = a / b;mp[s].second += a - x * b;while(b --){cin>>s;mp[s].second += x;}}for(int i = 0 ; i < n ; i ++){cout<<orginqueue[i]<<" "<<mp[orginqueue[i]].second - mp[orginqueue[i]].first<<endl;}return 0;
}