紅包的收益(筆試)

          題目描述

           如你所知,中國素來有發紅包的習俗。ios

          新年要到了,小明想要知道朋友圈裏每一個人的收益。app

          每一個人有mi數量的錢用來發紅包,而且這筆錢會平均地發給ki我的(收益獲得的錢再也不發紅包)。spa

          並且發給每一個人的錢都是整數。若是不能整除,發紅包的人保留mi mod ki的錢。code

 

輸入

 

第1行,一個整數n,2<=n<=10,小明的n個朋友。blog

第 2到n+1行每行一個字符串,第i+1行表示第i我的的名字。內存

接下來n段:ci

每段第一行是一個字符串,表示發紅包的人的名字。字符串

第二行爲兩個數mi,ki。含義如上。string

接下來ki行,每行一個字符串表示被髮紅包的人的名字。it

 

 

樣例輸入

 

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;
}
相關文章
相關標籤/搜索