思路

  • 题意:给你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(优先队列+贪心)相关推荐

  1. LeetCode 1642. 可以到达的最远建筑(二分查找 / 优先队列贪心)

    文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 优先队列+贪心 1. 题目 给你一个整数数组 heights ,表示建筑物的高度.另有一些砖块 bricks 和梯子 ladders . 你 ...

  2. 【CF 732E】Sockets(优先队列+贪心)

    [CF 732E]Sockets(优先队列+贪心) 题目大意: n台电脑,m个供电器. 每台电脑和每个供电器都有电量,当电脑i的电量和供电器j电量相同时,可以连接供电. 现在提供变压器,可以连接到供电 ...

  3. New Year Snowmen((贪心)map+优先队列)

    文章目录 一.题目 二.解题步骤 1.题意 2.思路 Source Program 一.题目 New Year Snowmen:传送门 Examples Input 7 1 2 3 4 5 6 7 O ...

  4. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  5. New Year Snowmen(贪心)

    As meticulous Gerald sets the table and caring Alexander sends the postcards, Sergey makes snowmen. ...

  6. POJ3614Sunscreen(优先队列+贪心)

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8435   Accepted: 2981 Descrip ...

  7. *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)

    题干: Brickgao, who profited from your accurate calculating last year, made a great deal of money by m ...

  8. LeetCode 1199. 建造街区的最短时间(优先队列贪心)

    文章目录 1. 题目 2. 解题 1. 题目 你是个城市规划工作者,手里负责管辖一系列的街区.在这个街区列表中 blocks[i] = t 意味着第 i 个街区需要 t 个单位的时间来建造. 由于一个 ...

  9. hdu 4544 优先队列+贪心

    题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为 ...

最新文章

  1. sftp工具都有哪些_色彩校正的工具都有哪些?
  2. 教孩子学编程python语言pdf_iOS(iPhone)应用程序开发入门视频教程(35讲)
  3. AndroidStudio打开新项目提示:Module: ‘app‘ platform ‘android-29‘ not found
  4. c# select标签绑定枚举,并以Description做Text显示
  5. ODI中web service介绍
  6. Scratc3.0作品转化成exe文件
  7. “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
  8. 《西线无战事》:合上书的那一刻:只想痛哭
  9. 小鱼的航程(改进版)(洛谷-P1424)
  10. python字典弱引用_如何使用弱引用优化 Python 程序的内存占用?
  11. 如何获取网卡硬件地址
  12. 记录学习第三天---系统基础
  13. ubuntu安装tomcat7
  14. C++调用CMD,等CMD运行完后继续运行C++
  15. php部分---注册审核
  16. Appstore抓包获取APP历史版本
  17. @00后,有个编程问题请教下
  18. 学校计算机功能室使用登记表,学校各功能室使用情况登记表
  19. centos7.X版本如何下载网络流量实时监控工具iftop
  20. matlab 中图字体设置,关于matlab绘图中字体及图片大小等的设置

热门文章

  1. python 单词纠错_自然语言处理1——语言处理与Python(内含纠错)
  2. Android小练习2——制作点菜界面
  3. dsp6657的串口学习
  4. 笔记·Pandas几类数据读写方法对比——csv,parquet,feather和pickle
  5. 直角三角形 纪中 1385 数学_斜率
  6. Mac的日常使用之免费NTFS for Mac (mounty)一款免费的NTFS 。畅快的使用移动硬盘
  7. 在VB6中生成随机数
  8. 一层神经网络实现鸢尾花数据集分类
  9. 网站建设多少钱(做一个网站需要多少钱)
  10. Linux下unzip解压文件时报错:End-of-central-directory signature not found.