D - New Year Snowmen(优先队列+贪心)
思路
- 题意:给你n个雪球,每个雪球都有一个半径,做一个雪人需要不同半径的三个雪球,问最多可以做多少个雪人
- 做法:贪心:每次都选剩余数量最多的三种半径的雪球,原因是如果我们选数量少的雪球,那么有可能最后没有充分利用数量多的雪球,例如1 2 3 4 5 5 ,这样如果每次选数量多的 答案应该是 2,分别为 5 4 3和5 2 1,反之,我们如果第一次不选数量多的,无论如何都只能堆一个雪人。
- 利用大顶堆来每次选出数量最多的三种雪球
代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
struct point{int num,val;bool operator < (const point &a) const{return num < a.num;}
};
map<int,int> mp;
const int N=1e5+5;
int a1[N];int a2[N];int a3[N];
int main(){int n;cin >> n;for(int i=0;i<n;i++){int a;cin >> a;mp[a]++;}priority_queue<point> q;for(map<int, int>::iterator it = mp.begin(); it != mp.end(); it++){point tmp;tmp.val=it->first;tmp.num=it->second;q.push(tmp);}int sum=0;int index=0;while(q.size() >= 3){point a = q.top(); //取前三个q.pop();point b = q.top();q.pop();point c = q.top();q.pop();sum++;a1[index] = a.val;a2[index] = b.val;a3[index++] = c.val;if(a.num-1 != 0) { a.num--;q.push(a);} if(b.num-1 != 0) { b.num--;q.push(b);} if(c.num-1 != 0) { c.num--;q.push(c);} }cout << sum << "\n";for(int i = 0; i < index; i++){if(a1[i] < a2[i]) swap(a1[i], a2[i]); //别忘记这一步。。。if(a1[i] < a3[i]) swap(a1[i], a3[i]);if(a2[i] < a3[i]) swap(a2[i], a3[i]);}for(int i = 0; i < index; i++){cout << a1[i] << " " << a2[i] << " " << a3[i] << "\n";}
}
D - New Year Snowmen(优先队列+贪心)相关推荐
- LeetCode 1642. 可以到达的最远建筑(二分查找 / 优先队列贪心)
文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 优先队列+贪心 1. 题目 给你一个整数数组 heights ,表示建筑物的高度.另有一些砖块 bricks 和梯子 ladders . 你 ...
- 【CF 732E】Sockets(优先队列+贪心)
[CF 732E]Sockets(优先队列+贪心) 题目大意: n台电脑,m个供电器. 每台电脑和每个供电器都有电量,当电脑i的电量和供电器j电量相同时,可以连接供电. 现在提供变压器,可以连接到供电 ...
- New Year Snowmen((贪心)map+优先队列)
文章目录 一.题目 二.解题步骤 1.题意 2.思路 Source Program 一.题目 New Year Snowmen:传送门 Examples Input 7 1 2 3 4 5 6 7 O ...
- CodeForces 140C New Year Snowmen (贪心+优先队列)
题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...
- New Year Snowmen(贪心)
As meticulous Gerald sets the table and caring Alexander sends the postcards, Sergey makes snowmen. ...
- POJ3614Sunscreen(优先队列+贪心)
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8435 Accepted: 2981 Descrip ...
- *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)
题干: Brickgao, who profited from your accurate calculating last year, made a great deal of money by m ...
- LeetCode 1199. 建造街区的最短时间(优先队列贪心)
文章目录 1. 题目 2. 解题 1. 题目 你是个城市规划工作者,手里负责管辖一系列的街区.在这个街区列表中 blocks[i] = t 意味着第 i 个街区需要 t 个单位的时间来建造. 由于一个 ...
- hdu 4544 优先队列+贪心
题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为 ...
最新文章
- sftp工具都有哪些_色彩校正的工具都有哪些?
- 教孩子学编程python语言pdf_iOS(iPhone)应用程序开发入门视频教程(35讲)
- AndroidStudio打开新项目提示:Module: ‘app‘ platform ‘android-29‘ not found
- c# select标签绑定枚举,并以Description做Text显示
- ODI中web service介绍
- Scratc3.0作品转化成exe文件
- “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
- 《西线无战事》:合上书的那一刻:只想痛哭
- 小鱼的航程(改进版)(洛谷-P1424)
- python字典弱引用_如何使用弱引用优化 Python 程序的内存占用?
- 如何获取网卡硬件地址
- 记录学习第三天---系统基础
- ubuntu安装tomcat7
- C++调用CMD,等CMD运行完后继续运行C++
- php部分---注册审核
- Appstore抓包获取APP历史版本
- @00后,有个编程问题请教下
- 学校计算机功能室使用登记表,学校各功能室使用情况登记表
- centos7.X版本如何下载网络流量实时监控工具iftop
- matlab 中图字体设置,关于matlab绘图中字体及图片大小等的设置
热门文章
- python 单词纠错_自然语言处理1——语言处理与Python(内含纠错)
- Android小练习2——制作点菜界面
- dsp6657的串口学习
- 笔记·Pandas几类数据读写方法对比——csv,parquet,feather和pickle
- 直角三角形 纪中 1385 数学_斜率
- Mac的日常使用之免费NTFS for Mac (mounty)一款免费的NTFS 。畅快的使用移动硬盘
- 在VB6中生成随机数
- 一层神经网络实现鸢尾花数据集分类
- 网站建设多少钱(做一个网站需要多少钱)
- Linux下unzip解压文件时报错:End-of-central-directory signature not found.