USACO/gift1
描述
对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。 然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。 给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表, 请确定每个人收到的比送出的钱多的数目。
格式
PROGRAM NAME: gift1
INPUT FORMAT:
(file gift1.in)
- 第 1 行: 人数NP,2<= NP<=10
- 第 2 行 到 第NP+1 行:这NP个在组里人的名字,一个名字一行
- 第NP+2到最后:
这里的I段内容是这样组织的:
- 第一行是将会送出礼物人的名字。
- 第二行包含二个数字: 第一个是送出的钱的数目(在0到2000的范围里),第二个 NGi 是将收到这个人礼物的人的个数 如果 NGi 是非零的, 在下面 NGi 行列出礼物的接受者的名字,一个名字一行。
- OUTPUT FORMAT:
- (file gift1.out)
- 输出 NP 行
- 每行是一个的名字加上空格再加上收到的比送出的钱多的数目。
- 对于每一个人,他名字的打印顺序应和他在输入的2到NP+1行中输入的顺序相同。所有的送礼的钱都是整数。
- 每个人把相同数目的钱给每位要接受礼物的朋友,而且尽可能多给,不能给出的钱(即无法被整除的钱)由送礼者本人持有。
SAMPLE INPUT
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
SAMPLE OUTPUT
dave 302
laura 66
owen -359
vick 141
amr -150
解析:
这个题目不是很难(虽然题目描述的过程很啰嗦,细节繁杂,但数据量太小,纯模拟即可解决问题。)要注意的是:根据输入输出案例,某个人原来有的钱可能是0,也可能某个人是不给别人发钱的。另外:发出去之后剩余的零头要和收到的钱一起算作最后总结余的钱。

1 #include<stdio.h> 2 #include<string.h> 3 struct person 4 { 5 char name[16]; 6 int beginMoney;//原来拥有的钱 7 int everyOne; //该人送钱出去的时候给每个人的钱的数目 8 int endMoney; //最后拥有的钱 9 }; 10 int main() 11 { 12 int NP; 13 struct person p[12]; 14 int i,len;//共有len个人 15 char p1[16],p2[16];//p1是要送出钱的某个人的名字,p2是要从p1收到钱的某个人 16 int n;//p1要给n个人送钱 17 int k,j; 18 19 freopen("gift1.in","r",stdin); 20 freopen("gift1.out","w",stdout); 21 22 scanf("%d",&NP); 23 for(i=0;i<NP;i++) 24 { 25 scanf("%s",p[i].name); 26 p[i].beginMoney=0; 27 p[i].everyOne=0; 28 p[i].endMoney=0; 29 } 30 len=i; 31 32 while(scanf("%s",p1)!=EOF) 33 { 34 for(i=0;i<len;i++) 35 { 36 if(strcmp(p1,p[i].name)==0) 37 { 38 break; 39 } 40 } 41 k=i; 42 scanf("%d%d",&p[k].beginMoney,&n); 43 if(n>0) 44 { 45 p[k].everyOne=p[k].beginMoney/n; 46 p[k].endMoney+=p[k].beginMoney%n; 47 } 48 else 49 { 50 p[k].everyOne=0; 51 p[k].endMoney+=p[k].beginMoney; 52 } 53 54 for(i=0;i<n;i++) 55 { 56 scanf("%s",p2); 57 for(j=0;j<len;j++) 58 { 59 if(strcmp(p2,p[j].name)==0) 60 { 61 p[j].endMoney+=p[k].everyOne; 62 break; 63 } 64 } 65 } 66 } 67 for(i=0;i<len;i++) 68 { 69 printf("%s %d\n",p[i].name,p[i].endMoney-p[i].beginMoney); 70 } 71 return 0; 72 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2013-12-18 OpenJudge计算概论-计算鞍点
2013-12-18 OpenJudge计算概论-错误探测