|
常用鏈接
留言簿(1)
隨筆分類
隨筆檔案
文章分類
文章檔案
搜索
最新評(píng)論

閱讀排行榜
評(píng)論排行榜
Powered by: 博客園
模板提供:滬江博客
|
|
|
|
|
發(fā)新文章 |
|
|
Greedy Gift Givers
貪婪的禮物送禮者
譯 by tim green
對(duì)于一群要互送禮物的朋友,你要確定每個(gè)人送出的禮物比收到的多多少(and vice versa for those who view gift giving with cynicism)。 在這一個(gè)問題中,每個(gè)人都準(zhǔn)備了一些錢來送禮物,而這些錢將會(huì)被平均分給那些將收到他的禮物的人。 然而,在任何一群朋友中,有些人將送出較多的禮物(可能是因?yàn)橛休^多的朋友),有些人有準(zhǔn)備了較多的錢。 給出一群朋友, 沒有人的名字會(huì)長于 14 字符,給出每個(gè)人將花在送禮上的錢,和將收到他的禮物的人的列表, 請(qǐng)確定每個(gè)人收到的比送出的錢多的數(shù)目。
IMPORTANT NOTE
測(cè)試系統(tǒng)是 Linux 符合標(biāo)準(zhǔn)的 Unix 的協(xié)定。 用'\n'作為行的結(jié)束。 這和 Windows 系統(tǒng)用'\n' 和 '\r'作為行的結(jié)束是不同的。 你的程序不要被這困住了。
PROGRAM NAME: gift1
INPUT FORMAT第 1 行: 人數(shù)NP,2<= NP<=10??
第 2到 NP+1 行: 這NP個(gè)在組里人的名字 一個(gè)名字一行
第NP+2到最后: 這里的NP段內(nèi)容是這樣組織的: 第一行是將會(huì)送出禮物人的名字。 第二行包含二個(gè)數(shù)字: 第一個(gè)是原有的錢的數(shù)目(在0到2000的范圍里),第二個(gè)NGi是將收到這個(gè)送禮者禮物的人的個(gè)數(shù) 如果 NGi 是非零的, 在下面 NGi 行列出禮物的接受者的名字,一個(gè)名字一行。
SAMPLE INPUT (file gift1.in)
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
OUTPUT FORMAT
輸出 NP 行 每行是一個(gè)的名字加上空格再加上收到的比送出的錢多的數(shù)目。 對(duì)于每一個(gè)人,他名字的打印順序應(yīng)和他在輸入的2到NP+1行中輸入的順序相同。所有的送禮的錢都是整數(shù)。 每個(gè)人把相同數(shù)目的錢給每位要送禮的朋友,而且盡可能多給,不能給出的錢被送禮者自己保留。
SAMPLE OUTPUT (file gift1.out)
dave 302 laura 66 owen -359 vick 141 amr -150
這個(gè)題也很簡(jiǎn)單,主要就是說把每個(gè)人的錢給其他人分一下就行了。 唯一麻煩一點(diǎn)的就是對(duì)人名的處理,我是直接比較的,沒什么好方法。再有一個(gè)就是注意一個(gè)人有的錢數(shù)不能整除他分錢給的人數(shù)的時(shí)候要把余數(shù)留下。 最后用每個(gè)人得到的錢減了給的就行了
#include?"stdio.h"
#include?"stdlib.h"
#define?S?20
struct?peo
  {
????char?name[S];
????int?get;
????int?have;
????int?m;
}p[11];
int?n;

int?scmp(char?*s1,char?*s2)
  {
????int?i=0;
????if(strlen(s1)!=strlen(s2))
????????return?0;
????while(s1[i]!='\0')
 ???? {
????????if(s1[i]!=s2[i])
????????????return?0;
????????i++;
????}
????return?1;
}

int?getname(char?*s)
  {
????int?i;
????for(i=0;i<n;i++)
 ???? {
????????if(scmp(s,p[i].name))
????????????return?i;
????}
}

void?input()
  {
????int?i,j,t;
????int?now;
????scanf("%d",&n);
????for(i=0;i<n;i++)
 ???? {
????????scanf("%s",p[i].name);
????????getchar();
????????p[i].get=0;
????}
}

void?work()
  {
????int?i,j,t;
????char?str[S];
????int?now,tmp;
????for(t=0;t<n;t++)
 ???? {
????????scanf("%s",str);
????????getchar();
????????now=getname(str);
????????scanf("%d%d",&p[now].have,&p[now].m);
????????getchar();
????????for(i=0;i<p[now].m;i++)
 ???????? {
????????????scanf("%s",str);
????????????getchar();
????????????tmp=getname(str);
????????????p[tmp].get+=p[now].have/p[now].m;
????????}
????????if(p[now].m)
????????????p[now].get+=p[now].have%p[now].m;
????}
}

void?output()
  {
????int?i;
????for(i=0;i<n;i++)
 ???? {
????????printf("%s?%d\n",p[i].name,p[i].get-p[i].have);
????}
}

int?main()
  {
????freopen("gift1.in","r",stdin);
????freopen("gift1.out","w",stdout);
????input();
????work();
????output();
????exit(0);
}
|
|