HDOJ-1263
水果
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5303 Accepted Submission(s): 2022Problem Description夏天来了~~好开心啊,呵呵,好多好多水果~~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
Input第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
Output对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
Sample Input15apple shandong 3pineapple guangdong 1sugarcane guangdong 1pineapple guangdong 3pineapple guangdong 1Sample Outputguangdong|----pineapple(5)|----sugarcane(1)shandong|----apple(3)
本题可用二维map容器求解。
第一次写二维map,真是学到了!map容器还能这麽用~详解见代码注释。
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 //定义二维map容器 8 map<string,map<string,int> > a;//注意此处两">"间要加空格 9 map<string,int> b; 10 int n,m; 11 12 int main(){ 13 string f,p; 14 int ans; 15 while(~scanf("%d",&n)){ 16 while(n--){ 17 a.clear(); 18 b.clear(); 19 cin>>m; 20 while(m--){ 21 cin>>f>>p>>ans; 22 a[p][f]+=ans;//此处将产地放在前面方便输出 23 } 24 //定义两个map容器的前向迭代器 25 map<string,map<string,int> >::iterator i;//注意此处两">"间要加空格 26 map<string,int>::iterator j; 27 for(i=a.begin();i!=a.end();i++){ 28 cout<<i->first<<endl;//输出产地 29 b=i->second; 30 for(j=b.begin();j!=b.end();j++){//输出b容器中保存的对应的水果和交易数量 31 cout<<" |----"<<j->first<<"("<<j->second<<")"<<endl;//注意输出格式,最好复制 32 } 33 } 34 if(n>0)//注意换行符的输出 35 printf("\n"); 36 } 37 } 38 return 0; 39 }