题目: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. windows下安装pip和easy_install

    1. 从这里下载 get-pip.py: https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py 2. python ...

  2. Java后台获取前端utf-8格式&nbsp;空格,使用trim()消除不了的解决办法

    byte bytes[] = {(byte) 0xC2,(byte) 0xA0}; String UTFSpace = new String(bytes,"utf-8"); htm ...

  3. 【leetcode 简单】 第八十四题 两个数组的交集

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...

  4. UNIX网络编程 第4章 基本TCP套接字编程

    本章的几个函数在很大程度上展示了面向对象与面向过程的不同之处.

  5. css的盒模型手机端兼容写法应该是啥样的呢?

    前言:刚刚接触css3的盒模型,感觉对于解决水平垂直居中.固定宽度/高度和可变宽度/高度同时存在这样的问题很有效.但是最近在看一个腾讯手机端框架(Frozen UI )的时候发现一个很神奇的多行文字截 ...

  6. CodeForces 724G: Xor-matic Number of the Graph

    题目传送门:CF724G. 题意简述: 一张 \(n\) 个点的无向图,边有边权. 定义三元组 \((u,v,w)(1\le u < v\le n)\) 合法当且仅当存在从点 \(u\) 到点 ...

  7. STL容器 vector,list,deque 性能比较

    C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...

  8. OBJECT_ID()的使用方法

    数据库中每个对像都有一个唯一的ID值,用Object_name(id)可以根据ID值得到对像的名称,object_id(name)可以根据对像名称得到对象的ID object_id()只能返回用户创建 ...

  9. SQLSERVER 2008 编辑所有或者任意行

    选中表 右键选择“编辑前200行”,然后选择左上角的 sql图标,然后在右侧的SQL语句去掉 top 200 然后执行查询 就可以编辑所有的行了,可以选择自己需要写SQL,然后查询编辑. 第二种方法: ...

  10. plsql中做计划任务

    第一步: 1.  打开PLSQL后,选择节点jobs,右键新建,弹出界面后再what值中填写需要做计划的存储名加分号结束,如门诊收入存储PH_ClinicIncome(1):其中1代表医疗机构代码 间 ...