计蒜客:公司营收(模拟)

计蒜客:公司营收(模拟)点击打开链接

一些公司之间有合作关系,会计小张想了解大家的贸易额的多少。在这个问题中的各家公司都有一个固定的资产输出,而这些资产输出将被平均分给和这家公司有贸易公司的人(资产不会出现小数,如果 333 的资产输出给 222 个公司,则每个被输出的公司得到 111,输出公司中剩余 111)。但是,这些公司中,有些公司的资产输出较多,有些则较少。给出小张要统计的公司名称(均小于 20 字符),给出每个公司的资产输出和与这家公司有贸易关系的公司列表,请确定每家公司贸易收入大于贸易支出的数量。

输入第 111 行:公司数 TTT2≤T≤102\leq T \leq 102T10

输入第 111T+1T+1T+1 行:所有的公司名称,一行一个

T+2T+2T+2 行到最后,为多组输入数据:每组中第一行为公司名,第二行包含两个数据,分别是第一行对应公司的贸易输出额度(000400040004000),第二个数据是这家公司有贸易的公司数量 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;
}

猜你喜欢

转载自blog.csdn.net/qq_41333528/article/details/80463728
今日推荐