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经营 ...
随机推荐
- [转载]Require.js Example – Setup Time 2 Minutes
http://www.sitepoint.com/require-js-setup-time-2-minutes/ Setup Require.js in just 2 minutes. or dow ...
- soj1049.Mondriaan
1049. Mondriaan Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Squares and rectangl ...
- Python练习-猜年龄的LowB游戏
Alex大神今天让我做一个猜年龄的游戏: 第一个游戏是你只能猜三次:真的很LowB啊~ # 编辑者:闫龙 #猜年龄游戏,3次后程序自动退出! ages = 29; #for循环3次 for i in ...
- transparent 透明效果
background-color:transparent;就是把背景色设置为透明. 实际上background默认的颜色就是透明的属性.所以写和不写都是一样的 span{ width: 0; heig ...
- 20165230 2017-2018-2 《Java程序设计》第9周学习总结
20165230 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十二章 java网络编程 学习了用于网络编程的类,了解URL.Socket.InetAdd ...
- 【codeforces】【比赛题解】#862 CF Round #435 (Div.2)
这次比赛打得很舒服,莫名得了个Rank41,涨了219的Rating,就比较优秀.不过还是没有闫神厉害啊.题目链接::P. [A]MEX 题意: Evil博士把Mahmoud和Ehab绑架到了邪恶之地 ...
- PE文件结构及其加载机制
一.PE文件结构 PE即Portable Executable,是win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格 ...
- layui table表格字段过长,展示不完整时,鼠标放到上面展示完整信息
亲测可以直接用 1.首先每个列都有一个title,里面放入完整信息,然后写一个如下的function, function tdTitle(){ $('th').each(function(index, ...
- Python全局变量和局部变量
全局变量和局部变量 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域. 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问.调用函数时,所有在函数内声明的变量 ...
- C#实现控制Windows系统关机、重启和注销的方法
shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设 ...