红包的收益(笔试)
Posted 追求沉默者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红包的收益(笔试)相关的知识,希望对你有一定的参考价值。
题目描述
如你所知,中国素来有发红包的习俗。
新年要到了,小明想要知道朋友圈里每个人的收益。
每个人有mi数量的钱用来发红包,并且这笔钱会平均地发给ki个人(收益得到的钱不再发红包)。
而且发给每个人的钱都是整数。如果不能整除,发红包的人保留mi mod ki的钱。
输入
第1行,一个整数n,2<=n<=10,小明的n个朋友。 第 2到n+1行每行一个字符串,第i+1行表示第i个人的名字。 接下来n段: 每段第一行是一个字符串,表示发红包的人的名字。 第二行为两个数mi,ki。含义如上。 接下来ki行,每行一个字符串表示被发红包的人的名字。
|
样例输入
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
|
输出
n行,每行一个字符串和一个整数,分别表示第i个人的名字和收益。
|
样例输出
dave 302 laura 66 owen -359 vick 141 amr -150
|
时间限制C/C++语言:1000MS其它语言:3000MS
|
内存限制C/C++语言:65536KB其它语言:589824KB
|
#include<iostream> #include<string> #include<map> #include<vector> using namespace std; int main() { int n; int ss[10][2]; map<string, int> mapp; string sss[10];//记录原始的名字输入顺序 string name[10];//记录要发红包的人 string str[10][10];//记录某个人要发给某些人 while (cin >> n) { for (int i = 0; i < n; ++i) { cin >> sss[i]; mapp.insert(pair<string, int>(sss[i], 0)); } for (int i = 0; i < n; ++i) { cin >> name[i]; cin >> ss[i][0] >> ss[i][1]; for (int j = 0; j < ss[i][1]; ++j) cin >> str[i][j]; } for (int i = 0; i < n; i++) { if (ss[i][1]) { int s = ss[i][0] / ss[i][1]; int t = ss[i][0] % ss[i][1]; for (int j = 0; j < ss[i][1]; ++j) mapp[str[i][j]] += s; mapp[name[i]] += t; mapp[name[i]] -= ss[i][0]; } } for (int i = 0; i < n; i++) { cout << sss[i] << " " << mapp[sss[i]] << endl; } } return 0; }
以上是关于红包的收益(笔试)的主要内容,如果未能解决你的问题,请参考以下文章