【USACO-Chapter1-1.1】【模拟】Greedy Gift Givers
来源:互联网 发布:soapenv java 请求 编辑:程序博客网 时间:2024/06/07 00:44
【题目描述】
对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表,请确定每个人收到的比送出的钱多的数目。
【输入格式】(gift1.in)
第 1 行: 人数NP,2<= NP<=10
第 2 行 到 第NP+1 行:这NP个在组里人的名字 一个名字一行
第NP+2到最后:
这里的I段内容是这样组织的:
第一行是将会送出礼物人的名字。
【输出格式】(gift1.out)
输出 NP 行
每行是一个的名字加上空格再加上收到的比送出的钱多的数目。
对于每一个人,他名字的打印顺序应和他在输入的2到NP+1行中输入的顺序相同。所有的送礼的钱都是整数。
【输入样例】
5dave
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
【输出样例】
dave 302
laura 66
owen -359
vick 141
amr -150
这道题两种做法,一种直接模拟即可,另一种用C++中map,代码要简化一点。
直接模拟:
#include<fstream>#include<cstring>using namespace std;ifstream cin ("gift1.in");ofstream cout("gift1.out");struct person{ string name; int ge; int sh; }person[20];int n;void readdata(){ cin >> n; for(int i = 1;i <= n;i++) { cin >> person[i].name; } }int find(string name){ for(int i = 1;i <= n;i++) { if(person[i].name == name) { return i; } }}void give(string name,int mon){ person[find(name)].sh += mon;}void solve(){ for(int i = 1;i <= n;i++) { string name1; int order; int mon1,m; cin >> name1; order = find(name1); cin >> mon1 >> m; for(int j = 1;j <= m;j++) { string name2; int mon2; mon2 = mon1 / m; cin >> name2; give(name2,mon2); //fout << person[find(name2)].money << endl; person[order].ge += mon2; } } for(int i = 1;i <= n;i++) { cout << person[i].name << ' ' << person[i].sh - person[i].ge << endl; }}int main(){ readdata(); solve(); return 0;}map版:
#include<fstream>#include<cstring>#include<map>using namespace std;ifstream cin ("gift1.in");ofstream cout("gift1.out");string name[20];map <string,int>give,get;int n;void readdata(){ cin >> n; for(int i = 1;i <= n;i++) { cin >> name[i]; } }void song(string name,int mon){ get[name] += mon;}void solve(){ for(int i = 1;i <= n;i++) { string name1; int mon1,m; cin >> name1; cin >> mon1 >> m; for(int j = 1;j <= m;j++) { string name2; int mon2; cin >> name2; mon2 = mon1 / m; song(name2,mon2); //使每个人得到mon2的钱 //fout << person[find(name2)].money << endl; give[name1] += mon2; //统计送出的钱 } } for(int i = 1;i <= n;i++) { cout << name[i] << ' ' << get[name[i]] - give[name[i]] << endl; }}int main(){ readdata(); solve(); return 0;}
- 【USACO-Chapter1-1.1】【模拟】Greedy Gift Givers
- USACO--1.1Greedy Gift Givers+模拟
- USACO 1.1.2 - Greedy Gift Givers(模拟)
- USACO 1.1-Greedy gift givers
- usaco 1.1:Greedy Gift Givers
- USACO 1.1 Greedy Gift Givers
- usaco 1.1 greedy gift givers
- usaco/1.1 Greedy Gift Givers
- USACO 1.1 Greedy Gift Givers
- USACO 1.1 Greedy Gift Givers
- USACO 1.1 Greedy Gift Givers
- USACO 1.1 Greedy Gift Givers
- Greedy Gift Givers(USACO)
- usaco--Greedy Gift Givers
- [USACO] Greedy Gift Givers
- USACO-----Greedy Gift Givers
- USACO | Greedy Gift Givers
- USACO->Greedy Gift Givers
- dbus实例讲解(二下):消息和消息总线
- jdbc
- 在VMware Workstation中使多个LAN segment互联互通
- dbus实例讲解(二上):消息和消息总线
- dbus实例讲解(一):初次见面
- 【USACO-Chapter1-1.1】【模拟】Greedy Gift Givers
- POJ 1007
- 黑马程序员_学习日记44_611基础加强(扩展方法、XML、深拷贝浅拷贝、特性)
- 字符编码详解及由来(UNICODE,UTF-8,GBK)
- vi命令整理
- 使用测试工具iPerf监控无线网络性能
- 黑马程序员_学习日记45_612数据库开发及ADO.Net(SQL语言)
- Opera看网页不流畅之原因
- 【嵌入式Linux】VIM命令大全