这道题大意就是几个人互送礼物,让你求每个人的盈利。

原题给的样例数据:

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

这题使用模拟算法就行了,就是注意输入的时候不要掉坑里了。

还有就是比如说自己有200快钱给3个人,每个人得到66块,剩下两块自己收,并计入答案。

还有就是想题目里的vick,分给0个人,千万不要除以了0。。对了为了找人名方便,可以把一个人的名字和编号存到一个map容器中,具体在代码里已经有了,就不细说了。

下面是我的程序:

/*
ID:aaabbbr1
LANG:C++
TASK:gift1
*/
#include <stdio.h>
#include <string>
#include <map>
#include <iostream>
using namespace std;
struct person
{
string name;
int gave[10],have,cnt,receive;
person(){have=receive=0;}
}a[10];
map<string,int>link;//这只是方便从人名找到编号而已
void gavemoney(int x)
{
if(a[x].cnt==0)return;//小心除以0了(也就是如果给的人数为0就不给了)
int per=a[x].have/a[x].cnt;//计算每人多少钱
int tot=per*a[x].cnt;//计算一共给多少钱
a[x].receive+=a[x].have-tot;//计算自己的零钱 并汇入收到的钱里面
for(int i=0;i<a[x].cnt;i++)//给钱
a[ a[x].gave[i] ].receive += per;
}
void display(int x)
{
cout << a[x].name << " " << a[x].receive-a[x].have << "\n";
}
int main()
{
freopen("gift1.in","r",stdin);
freopen("gift1.out","w",stdout);
string tmp;
int n,x,t1,t2;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> tmp;
a[i].name=tmp;
link[tmp]=i;
}
for(int i=0;i<n;i++)
{
cin >> tmp;
x=link[tmp];
cin >> t1 >> t2;
a[x].have=t1;
a[x].cnt=t2;
for(int j=0;j<a[x].cnt;j++)
{
cin >> tmp;
a[x].gave[j]=link[tmp];
}
}
for(int i=0;i<n;i++)
gavemoney(i);
for(int i=0;i<n;i++)
display(i);
fclose(stdin);
fclose(stdout);
return 0;
}

USACO 1.1.2 Greedy Gift Givers(gift1)的更多相关文章

  1. USACO Section 1.1-2 Greedy Gift Givers

    Greedy Gift Givers 贪婪的送礼者 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少. 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那 ...

  2. usaco training <1.2 Greedy Gift Givers>

    题面 Task 'gift1': Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided t ...

  3. USACO Section 1.1 Greedy Gift Givers 解题报告

    题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...

  4. USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers

    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...

  5. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...

  6. USACO . Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...

  7. Greedy Gift Givers 贪婪的送礼者 USACO 模拟

    1002: 1.1.2 Greedy Gift Givers 贪婪的送礼者 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 9[提交] [状态] [讨论版] [命题人:外部导入 ...

  8. Section 1.1 Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends hasdecided to exchange gifts o ...

  9. USACO-Greedy Gift Givers(贪婪的送礼者)-Section1.2<2>

    [英文原题] Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange ...

随机推荐

  1. __cdecl & __stdcall calling conventions

    (一) __cdecl: c declaration C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.C/C++默认的调用方式,可用于函数参数不确定的情况下. ...

  2. Python函数(三)-局部变量

    全局变量 全局变量在函数中能直接访问 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" name = 'John' def te ...

  3. struts1.2里的ActionMessages的使用

    转自:https://blog.csdn.net/oswin_jiang/article/details/4582187

  4. Android Fragment用法详解(1)--静态使用Fragment

    先说明一下,本例子是运行在Android Studio下面的.同样的代码复制粘贴到Eclipse运行却会报错.具体原因我也没有细查.知道的哥们,留言通知下呗. Fragment,也就是碎片,本意是为了 ...

  5. sql 的积累

    sql的积累 By:山高似水深 原创 转载注明出处 .REVERSE() 反转 例如: Hive 可用 2016年12月3日11:31:59 2.instr(str,'.')位置 结果:得出在str中 ...

  6. div盒子模型

    <style type="text/css"> div{ width:300px; height:300px; background:green; margin:10p ...

  7. getParameter的用法及含义

    equest.getparameter用来获取页面输入框输入的数据例如:jsp页面学员账户:<input type="text" name="username&qu ...

  8. while 用法 for 循环的总结

    格式化输出.%s %d # name = input('请输入名字:') # age = input('请输入年龄:') # sex = input('请输入性别:') # # msg = '我的名字 ...

  9. 分布式锁2 Java非常用技术方案探讨之ZooKeeper 【转载】

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...

  10. GOOGLE机器学习速成班

    地址:https://developers.google.cn/machine-learning/crash-course/ 不用***就可以学习.