计蒜客:公司营收(模拟)点击打开链接
一些公司之间有合作关系,会计小张想了解大家的贸易额的多少。在这个问题中的各家公司都有一个固定的资产输出,而这些资产输出将被平均分给和这家公司有贸易公司的人(资产不会出现小数,如果 333 的资产输出给 222 个公司,则每个被输出的公司得到 111,输出公司中剩余 111)。但是,这些公司中,有些公司的资产输出较多,有些则较少。给出小张要统计的公司名称(均小于 20 字符),给出每个公司的资产输出和与这家公司有贸易关系的公司列表,请确定每家公司贸易收入大于贸易支出的数量。
输入第 111 行:公司数 TTT(2≤T≤102\leq T \leq 102≤T≤10)
输入第 111 到 T+1T+1T+1 行:所有的公司名称,一行一个
第 T+2T+2T+2 行到最后,为多组输入数据:每组中第一行为公司名,第二行包含两个数据,分别是第一行对应公司的贸易输出额度(000 到 400040004000),第二个数据是这家公司有贸易的公司数量 KKK,接下来 KKK 行每行分别写了这 KKK 个公司中的一个的名称
输出 TTT 行,每行是一个公司名加空格加它贸易收入比贸易支出多的额度。
样例输入
5 KFC Subway ETS Intel AMD KFC 200 3 Subway ETS Intel ETS 500 1 KFC AMD 150 2 Intel ETS Subway 0 2 AMD Intel Intel 0 0
样例输出
KFC 302 Subway 66 ETS -359 Intel 141 AMD -150
分析:
就当做是map的练习题吧代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<bitset>
#include<list>
#define UP(i,x,y) for(int i=x;i<=y;i++)
#define DOWN(i,x,y) for(int i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define ll long long
#define INF 0x3f3f3f3f
#define EXP 1e-10
#define lowbit(x) (x&-x)
using namespace std;
map<string,int> m;
int main(){
int n;cin>>n;
int t,mon,k;
string s,ts[15];
for(int i=1;i<=n;i++){
cin>>ts[i];
m.insert(make_pair(ts[i],0));
}
map<string,int>::iterator ite;
for(int i=1;i<=n;i++){
cin>>s>>mon;
ite=m.find(s);
cin>>k;
if(k==0)continue;
int dis=mon/k;
ite->second+=mon%k-mon;
for(int j=1;j<=k;j++){
cin>>s;
ite=m.find(s);
ite->second+=dis;
}
}
for(int i=1;i<=n;i++){
cout<<ts[i]<<' ';
ite=m.find(ts[i]);
cout<<ite->second<<endl;
}
return 0;
}