USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers
P1201 [USACO1.1]貪婪的送禮者Greedy Gift Givers
題目描述
對于一群(NP個)要互送禮物的朋友,GY要確定每個人送出的錢比收到的多多少。在這一個問題中,每個人都準備了一些錢來送禮物,而這些錢將會被平均分給那些將收到他的禮物的人。然而,在任何一群朋友中,有些人將送出較多的禮物(可能是因為有較多的朋友),有些人有準備了較多的錢。給出一群朋友,沒有人的名字會長于 14 字符,給出每個人將花在送禮上的錢,和將收到他的禮物的人的列表,請確定每個人收到的比送出的錢多的數目。
輸入輸出格式
輸入格式:
第 1 行: 人數NP,2<= NP<=10
第 2 行 到 第NP+1 行:這NP個在組里人的名字一個名字一行
第NP+2到最后:
這里的I段內容是這樣組織的:
第一行是將會送出禮物人的名字。
第二行包含二個數字:第一個是原有的錢的數目(在0到2000的范圍里),第二個 NGi 是將收到這個人禮物的人的個數 如果 NGi 是非零的, 在下面 NGi 行列出禮物的接受者的名字,一個名字一行。
輸出格式:
輸出共 NP NP 行,每行輸出一個人的名字和該人收到的錢比送出的錢多的數目。名字的順序應該與輸入第 2 2 行至 NP+1 NP+1 行的順序相同。
送出的錢永遠是整數,即假設送禮人一次向 m m 人送出 n n 元,每個人應該得到 \lfloor n/m \rfloor ?n/m? 元。剩余未送出的錢應返還給送禮者。
輸入輸出樣例
輸入樣例#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
說明
題目翻譯來自NOCOW。
USACO Training Section 1.1
#include<iostream> #include<cstdio> #include<map> using namespace std; int obje[2005]; int main() {int t;map<string,int>ob;map<int,string >obj;scanf("%d",&t);for(int i=0;i<t;i++){string w;cin>>w;ob.insert(make_pair(w,i));obj.insert(make_pair(i,w));}for(int i=0;i<t;i++){string a,w;int q,n;cin>>w>>q>>n;if(n==0) continue;q/=n;obje[ob[w]]-=q*n;while(n--){cin>>a;obje[ob[a]]+=q;}}for(int i=0;i<t;i++) cout<<obj[i]<<' '<<obje[i]<<endl;return 0; }總結
以上是生活随笔為你收集整理的USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dovecot 设置邮箱quota
- 下一篇: 串口db9接口定义_db9串口定义及颜色