[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行
每行是人的名字和每個人收到的比送出的錢多的數目
輸入輸出樣例
輸入樣例#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<cstdio> #include<iostream> #include<algorithm> #include<string.h> using namespace std; int n,x,h; char s[1000000],t[1000000]; struct node {char name[20];int sum; }; struct node q[1000000]; int main() {cin>>n;for (int i=1;i<=n;i++)cin>>q[i].name;for (int i=1;i<=n;i++){scanf("%s",s);for (int j=1;j<=n;j++)if (strcmp(s,q[j].name)==0){x=j;break;}int a,b;cin>>a>>b;if (b==0) continue;int y=a/b;int m=y*b;q[x].sum-=m;for (int k=1;k<=b;k++){scanf("%s",s);for (int g=1;g<=n;g++)if (strcmp(s,q[g].name)==0){h=g;break;}q[h].sum+=y;}}for (int i=1;i<=n;i++)cout<<q[i].name<<' '<<q[i].sum<<endl;return 0; }轉載于:https://www.cnblogs.com/YYC-0304/p/9499965.html
總結
以上是生活随笔為你收集整理的[USACO1.1]贪婪的送礼者Greedy Gift Givers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mzc和男家丁的游戏
- 下一篇: [USACO1.1]坏掉的项链Broke