水果

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. vim编辑makefile时临时不展开tab为空格

    可以先敲ctrl-v组合键,再敲tab键,这样就不会被转换成空格了. 给自己的备忘!

  2. 人生苦短之Python枚举类型enum

    枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用.当一个变量有几种可能的取值的时候,我们将它定义为枚举类型.在Python ...

  3. 详细阐述ping命令中请求超时与无法访问的区别

    1.Request timed out 这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全 正确的,至少有下几种情况. (1) 对方已关机,或者 ...

  4. PHP截取中英文混合字符

    <?php //////////////////////////////////////////////////////////////////// // PHP截取中英文及标点符号混合的字符串 ...

  5. 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,基于数据库Greenplum的开源版本,并且吸收PostgreSQL精髓

    为什么会有HybridDB的诞生?它经历了怎样的研发历程?它的应用场景和情况是怎样的?带着这些问题,InfoQ对阿里云的数据库专家兼Postgres中国社区/中国用户会主席萧少聪先生进行了采访,以下文 ...

  6. codeforces 665A A. Buses Between Cities(水题)

    题目链接: A. Buses Between Cities time limit per test 1 second memory limit per test 256 megabytes input ...

  7. codeforces 664B B. Rebus(乱搞题)

    题目链接: B. Rebus time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. C# 获取QQ好友列表信息的实现

    分析部分 当我们访问QQ空间的时候,大家可以在右侧的发现一个这样的统计信息  当点击这个链接的时候,会跳转到  这样一个URL 这个URl可以管理好友,当然也就能读取到好友  上面我们是在浏览器中的操 ...

  9. poj2226Muddy Fields——二分图匹配

    题目:http://poj.org/problem?id=2226 把行连通块作为左部点,列连通块作为右部点,行列连通块有相交的格子就连边: 则问题转化为求最小点覆盖,即最大匹配. 代码如下: #in ...

  10. OS__信号量(semaphore)PV操作

    信号量的概念 1.信号量的类型定义 信号量(semaphore)的数据结构为记录型数据结构一个值和一个指针,指针指向等待该信号量的下一个进程.信号量的值与相应资源的使用情况有关,在操作系统中,信号量用 ...