水果

Time Limit: 2000/1000 MS (Java/Others)   

Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 9855

Accepted Submission(s): 3934

Problem Description
夏天来了~~好开心啊,呵呵,好多好多水果~~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
 
Input
第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
 
Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
 
Sample Input
1
5
apple shandong 3
pineapple guangdong 1
sugarcane guangdong 1
pineapple guangdong 3
pineapple guangdong 1
Sample Output
guangdong
    |----pineapple(5)
    |----sugarcane(1)
shandong
    |----apple(3)
 
 
这次是中文题面,就免得我翻译了,大家理解起来很容易。
 
思路:其实只要了解一下map和pair的排序知识,他怎么说你怎么做就行了……STL中的map,它是map<key,value>形式的存在,像一个映射一样。它内部默认实现对于key的从小到大排序。而pair<first,second>我们不止一次地提到过了,先排first后排second。他题里面要求两个部分进行排序,一个是产地按字典序,一个是水果名称按字典序,其实就是字符串的从小到大排序。虽然怎么搞都可以,不过对于映射关系的构造(即哪个东西当first哪个东西当second)会影响代码复杂度。此处AlphaWA的思路是构造map<pair<水果产地,水果名称>,水果数量>,这样map的key就是pair<产地,名称>,value就是数量,数量是不用排序的,排序先排产地后排名称,符合题意,酱紫我们只遍历一遍map里的元素并输出就可以辣!
 
PS1:以这个为例,如果想要map降序而不是由小到大的话,和其他容器一样,只要map<P,int,greater<P> >即可(此处以P指代pair<string,string>)。更多其他自定义的map排序我也不会惹,感兴趣的同学可以自己搜索相关资料。
PS2:初学STL需要遇见的时候记一记这个容器是怎么用的,下次有机会就用一下,慢慢就能掌握一些基本操作了。
 
代码如下:
 #include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<utility>
using namespace std; typedef pair<string,string>P;//接下来用P代表pair<string,string>,免得每次都写那么长了
map<P,int>m;//map<pair<水果产地,水果名称>,水果数量> int main()
{
int test,n;
string s,t; scanf("%d",&test);
while(test--)
{
m.clear();
//输入
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int z;
cin>>s>>t>>z;//水果名称、水果产地、数量
if(m.find(P(t,s))!=m.end())//如果已存在则往上加
m[P(t,s)]+=z;
else//否则制造这对儿
m[make_pair(t,s)]=z;
} string q="";//一个临时的记录
//map已经排好了序直接放迭代器即可
for(map<P,int>::iterator it=m.begin();it!=m.end();it++)
{
//s取出此时的地点、t取出此时的水果
s=it->first.first,t=it->first.second;
//x取出此时的水果数量
int x=it->second; if(q!=s)//如果出现了新的产地,就要输出,每个产地只要输出一次
{
q=s;
printf("%s\n",s.c_str());//将string用printf输出的方法
}
printf(" |----%s(%d)\n",t.c_str(),x);//输出水果及其数量
} if(test) printf("\n");//题目要求的输出格式
} return ;
}

HDU-1263(STL+排序)的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. 转:详细解说 STL 排序(Sort)

    详细解说 STL 排序(Sort) 详细解说 STL 排序(Sort) 作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1. ...

  3. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  4. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  5. 详细解说 STL 排序(Sort)(转)

    作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sor ...

  6. hdu 1263 水果 结构的排序+sort自定义排序

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  7. HDU 1263 水果 结构体排序

    解题报告:一个结构体排序的题,用了一个运算符重载,要注意的是不同的地方可能会产相同的水果,一开始没注意. #include<cstdio> #include<cstring> ...

  8. STL || HDU 1263 水果

    map可以映射map…… 然后在map里面会自己排序 惊了 注意输出格式 回车的输出 #include <iostream> #include <cstdio> #includ ...

  9. HDU 1263 水果 (STL map)

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  10. ACM 水果 hdu 1263 一题多解

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1263 文章末有相应的一些测试数据供参考. 传统的数组解题方式 思路一: 三种属性的数据放在一个结构体里面, ...

随机推荐

  1. lAMP下新建维护站点全过程

    由于window2003年7.15日微软对此不进行更新和支持,因此换了服务器系统由原来的windows2003直接升级到linux,关于LAMP的环境配置请查看我其他的相关博客,在这仅讲述一下LAMP ...

  2. Vue 组件实例属性的使用

    前言 因为最近面试了二.三十个人,发现大部分都还是只是停留在 Vue 文档的教程.有部分连教程这部分的文档也没看全.所以稍微写一点,让新上手的 Vuer 多了解 Vue 文档的其他更需要关注的点. 因 ...

  3. 最简单ajax,$.post()用法

    最简单的ajax,$.post()用法 $.post("action.php",{'email':$('#email').val(),'address':$('#address') ...

  4. U盘安装Ubuntu 14.04 LTS正式版

    Ubuntu 14.04 LTS正式版发布,而且提供五年的支持和维护服务.Ubuntu 14.04是Ubuntu开发团队历经五年的心血之作.许多新手都喜欢把Linux安装文件刻录成光盘再安装,而安装好 ...

  5. juery的跨域请求2

    时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了. 好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了 ...

  6. 【USACO】Dining

    [题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...

  7. poj1236学校网络——连通块

    题目:http://poj.org/problem?id=1236 通过传输文件的特点可以看出要先求强联通分量,缩点: 问题1:即缩点后入度为0的点,从它们开始传文件可以传给所有学校: 问题2:对于所 ...

  8. 微信小程序基础组件

    所有的组件与属性都是小写,以连字符 - 连接 共同的属性类型: class id style bind*/catch* hidden data-* block标签. <block> 并不是 ...

  9. hibernate 学习 五 hibernate核心接口

    一 Configuration接口 Configuration对象只存在于系统的初始化阶段.配置相关. 配置文件可以使用默认的路径,也可以指定路径. Configuration config = ne ...

  10. bzoj3456

    分治+ntt 设dp[i]表示i个点的图联通的方案数 那么考虑dp,利用容斥,总-不符合,枚举j=1->i-1,然后考虑不符合,那么考虑和1联通的连通块,剩下的不和1连通,那么dp[i]=2^t ...