分类 coduck

题目描述

仓库里面堆积着很多的货物。小可放假归来,发现仓库里多了许多的货物。

小可作为仓库管理员,需要对新多出来的货物进行分类整理。但是这段时间多出来的货物太多了,你能帮小可整理一下吗?

输入描述

第一行一个正整数T(1≤ T≤ 10),代表有T组数据。

对于每组数据,第一行有一个正整数n,代表有n条入库记录。

接下来有n行入库记录。

每个入库记录由字符串a,b和一个正整数m(1≤ m≤ 100)组成,a是货物名,b是货物来源,m是数量。这两个字符串的长度都不长于80。

输出描述

请输出合并整理后格式正确的货物统计表。格式为:

把货物按照来源地分类,来源地按照字典序排序输出。每个来源地都有下级分类。

每个来源地下级分类中,每一行输出三个空格,一个|,四个-,用来保持缩进。子分类中,将来源地是此来源地的货物按照字典序排序,每个货物后面有一个括号,里面写货物的总数量。

具体格式参考样例

样例

输入

1
5
pencil shandong 3
eraser guangdong 1
water sichuan 1
eraser guangdong 3
water guangdong 1

输出

guangdong
   |----eraser(4)
   |----water(1)
shandong
   |----pencil(3)
sichuan
   |----water(1)

提示

注意:多组测试数据中,每组数据的输出之间间隔一个换行

代码

#include<bits/stdc++.h>
using namespace std;
map<string,map<string , int > > a;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n,s;
        cin>>n;
        a.clear();
        string s1,s2;
        for(int i=1;i<=n;i++){
            cin>>s1>>s2>>s;
            a[s2][s1]+=s;
        }
        for(pair<string,map<string,int > > it:a){
            cout<<it.first<<endl;
            for(pair<string,int > mi:it.second){
                cout<<"   |----"<<mi.first<<"("<<mi.second<<")"<<endl;
            }
        }
        a.clear();
        if(t) cout<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值