题目:http://acm.hdu.edu.cn/showproblem.php?pid=1263

文章末有相应的一些测试数据供参考。

传统的数组解题方式

思路一:

三种属性的数据放在一个结构体里面,然后按照题目要求排序。

输出处理的时候,遍历一遍,边统计边输出,因为排序并没有进行统计。

思路二:

同样是一个结构体,然后排序。

再做一个预处理——遍历一遍,如果产地和品种都一样,将数目加在后者上面,前者数目清零

将处理好的数组直接遍历输出(一个for循环里面两个 if 分别控制输出两类数据):

如果当前产地和前一个的产地不一样,输出产地

如果当前元素中水果数量不为零,输出水果信息

代码如下

两种思路前面的代码都一样:

 #include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct INFO
{
string area, fruit;
int num;
}info[]; inline bool my_cmp(const INFO& lhs, const INFO& rhs)
{
if (lhs.area == rhs.area)
return lhs.fruit < rhs.fruit;
return lhs.area < rhs.area;
}

思路一main函数代码:

int main()
{
int group;
cin >> group;
while (group--)
{
int n;
cin >> n;
for (int i = ; i < n; ++i)
cin >> info[i].fruit >> info[i].area >> info[i].num;
sort(info, info + n, my_cmp);
for (int i = ; i < n; ++i)
{
cout << info[i].area << endl;
bool key = false;
while (i + < n&&info[i + ].area == info[i].area) //如果产地一样
{
if (key) {
i++; //i 加了 1
if (info[i + ].area != info[i].area) { //下一个的产地可能和当前的产地不一样
cout << " |----" << info[i].fruit << "(" << info[i].num << ")" << endl;
break;
}
}
key = true;
int number = info[i].num;
while (i + < n&&info[i + ].fruit == info[i].fruit) //如果水果一样
{
i++;
number += info[i].num;
}
cout << " |----" << info[i].fruit << "(" << number << ")" << endl;
}
if (!key)
cout << " |----" << info[i].fruit << "(" << info[i].num << ")" << endl;
}
if (group)cout << endl;
}
}

思路二main函数代码:

 int main() {
int Group, m;
cin >> Group;
while (Group--) {
int j = ;
cin >> m;
for (int i = ; i < m; i++)
cin >> info[i].fruit >> info[i].area >> info[i].num;
sort(info, info + m, my_cmp);
//再次预处理
for (int i = ; i<m; i++){
if (info[i].area==info[i-].area&&info[i].fruit==info[i-].fruit){
info[i].num += info[i - ].num;
info[i - ].num = ;
}
}
cout << info[j].area << endl;
for (j = ; j<m; j++){
if (j != && info[j].area != info[j - ].area) //只要产地不一样就输出产地信息
cout << info[j].area << endl;
if (info[j].num != ) //只要数量不为0就输出水果信息
cout << " |----" << info[j].fruit << "(" << info[j].num << ")" << endl;
}
if (Group) cout << endl; //只要不是最后一组数据就打一个空行
}
return ;
}

STL中map嵌套解题方式

其思路同二,只不过map不需要分类

(代码转自:http://blog.csdn.net/u012861385/article/details/19038865)

 #include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
int N, M;
int i,j,k;
string name, place;
int value;
scanf("%d", &N);
while(N--)
{
map<string,map<string, int> > str; //先按地点,第一个string排序插入,之后按照第二个string名称排序插入//
map<string,map<string, int> >::iterator it;
map<string,int>::iterator iw;
scanf("%d", &M);
for(i = ; i <= M; i++)
{
cin >> name >> place >> value;
str[place][name] += value;
}
for(it = str.begin(); it != str.end(); it++)
{
cout << it->first <<endl;
for(iw = it->second.begin(); iw != it->second.end(); iw++)
{
cout<<" |----"<<iw->first<<"("<<iw->second<<")"<<endl;
}
}
if(N != )
cout << endl;
}
return ;
}

参考数据(本人):http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=34666&messageid=1&deep=0

对应的output如下

   |----a()
|----b()
|----c()
|----d() |----a()
|----b()
|----c()
|----d() |----a() |----a()
|----b() |----b()

谢谢您的阅读,祝您生活愉快~

ACM 水果 hdu 1263 一题多解的更多相关文章

  1. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

  2. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  3. 关于SQL的几道小题详解

    关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...

  4. HDU-1042-N!(Java大法好 &amp;&amp; HDU大数水题)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  5. 一题多解,ASP.NET Core应用启动初始化的N种方案[上篇]

    ASP.NET Core应用本质上就是一个由中间件构成的管道,承载系统将应用承载于一个托管进程中运行起来,其核心任务就是将这个管道构建起来.在ASP.NET Core的发展历史上先后出现了三种应用承载 ...

  6. 一题多解,ASP.NET Core应用启动初始化的N种方案[下篇]

    [接上篇]"天下大势,分久必合,合久必分",ASP.NET应用通过GenericWebHostService这个承载服务被整合到基于IHostBuilder/IHost的服务承载系 ...

  7. HDU 5122 K.Bro Sorting(模拟——思维题详解)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an A ...

  8. hdu 1263 水果 【二维map】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 题目大意: Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ ...

  9. 题解报告:hdu 1263 水果

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...

随机推荐

  1. 【Hadoop】Win7上搭建Hadoop开发环境,方法一

    在Win7上,编写hadoop程序 操作系统:win7 hadoop版本:CDH3u6 1.下载安装JDK,以及Eclipse 2.新建JAVA Project 3.去cloudera网站下载hado ...

  2. laravel二维数组手动分页显示

    示例:数组 $user 如下 $user: array (size=) 'sort' => array (size=) => float 0.028616622341171 => f ...

  3. HDU 4707 Pet 邻接表实现

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4707 解题报告:题目大意是在无向图G中有n个点,分别从0 到n-1编号,然后在这些点之间有n-1条边, ...

  4. python的数字IP实现

    第一种方法: import socket, struct >>> def ip2num(ip): ... return struct.unpack("!L", s ...

  5. Google Congestion Control介绍

    随着网络带宽的日益增加和便携式设备,如智能手机或平板电脑处理能力的增强,基于互联网的实时通信已经成为热点. 虽然视频会议已商用了多年,特别是SKYPE这样的视频应用在互联网上已有10年时间,但针对实时 ...

  6. python最大最小距离算法贴近度评价法

    1.大最小贴近度评价法 概念: 贴近度表示两个模糊几何之间的彼此接近程度,在模糊模式识别方法中采用贴近度的大小识别待判别模糊子集的模式类别.为衡量待识别子集的类别,需要判别各个阶段与标杆模糊集合之间的 ...

  7. 收集了一些python的文章

    来自: 戴铭 2010-08-31 17:52:31 newthreading - safer concurrency for Python 安全并发(1回应) http://www.starming ...

  8. 【算法】Base64编码

    1.说明 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 2.编码 ASCII码 -> 十六进制码 -> ...

  9. Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux【转】

    转自:http://www.cnblogs.com/LittleHann/p/4127096.html 目录 1. sys_call_table:系统调用表 2. 内核符号导出表:Kernel-Sym ...

  10. HDU 6196 happy happy happy 爆搜加剪枝

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6196 题意:给你长度为n的序列,爸爸和儿子玩一个游戏,儿子先手,儿子每次都选择最左边与最右边最大的那个 ...