ACM 水果 hdu 1263 一题多解
题目: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 一题多解的更多相关文章
- SQLServer 常见SQL笔试题之语句操作题详解
SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- 关于SQL的几道小题详解
关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...
- HDU-1042-N!(Java大法好 && HDU大数水题)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...
- 一题多解,ASP.NET Core应用启动初始化的N种方案[上篇]
ASP.NET Core应用本质上就是一个由中间件构成的管道,承载系统将应用承载于一个托管进程中运行起来,其核心任务就是将这个管道构建起来.在ASP.NET Core的发展历史上先后出现了三种应用承载 ...
- 一题多解,ASP.NET Core应用启动初始化的N种方案[下篇]
[接上篇]"天下大势,分久必合,合久必分",ASP.NET应用通过GenericWebHostService这个承载服务被整合到基于IHostBuilder/IHost的服务承载系 ...
- HDU 5122 K.Bro Sorting(模拟——思维题详解)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an A ...
- hdu 1263 水果 【二维map】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 题目大意: Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ ...
- 题解报告:hdu 1263 水果
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...
随机推荐
- spring-boot Test for Controller
spring-boot controller 测试示例: 单元测试类 package com.zzhi; import com.fasterxml.jackson.databind.ObjectMa ...
- VBscript.Encode 解码器
VBscript.Encode 解码器 此解码器算法来至互联网,我只是收集然后写了个简单的页面便于大家使用. 如有何不妥之处,请留言.
- 解析html和采集网页的神兵利器
HtmlAgilityPack是一个基于.Net的.第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端可以用Javascript解析html).截止到本文发表时, ...
- VC++的全局变量(转)
全局变量一般这样定义:1.在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt:这样就可以用了. 2.在stdafx.cpp中加入:int my ...
- curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API
打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...
- perl6: hash小笔记
> ,,, { => , => } > my $a = :%h h => { => , => } > $a.perl :h({, }) > my ...
- 64_t7
texlive-ulqda-bin-svn13663.0-33.20160520.fc26.2..> 24-May-2017 15:57 33102 texlive-ulqda-doc-svn2 ...
- Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】
最近发现使用 -z 和 -n 来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ] ...
- MySQL参数设置
InnoDB配置 从MySQL 5.5版本开始,InnoDB就是默认的存储引擎并且它比任何其它存储引擎的使用要多得多.那也是为什么它需要小心配置的原因. 1 innodb_file_per_table ...
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...