计蒜客:公司营收(模拟)点击打开链接
一些公司之间有合作关系,会计小张想了解大家的贸易额的多少。在这个问题中的各家公司都有一个固定的资产输出,而这些资产输出将被平均分给和这家公司有贸易公司的人(资产不会出现小数,如果 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; }