文章目录

  • 一、题目
  • 二、解题步骤
    • 1.题意
    • 2.思路
  • Source Program

一、题目

New Year Snowmen:传送门

Examples
Input
7
1 2 3 4 5 6 7
Output
2
3 2 1
6 5 4
Input
3
2 2 3
Output
0

二、解题步骤

1.题意

有 n 个雪球,给出每个雪球的大小,已知只有三个大小不同的雪球才能堆成一个雪人,问最多能堆几个

2.思路

贪心,由于只有三个大小不同的雪球才能堆成一个雪人,因此应该先拿个数多的雪球,这样等拿完后可以尽量保证剩下的不同大小的雪球最多
实现:
由于 n 最大到 1E9,故用map来统计每种数字出现的次数。
此外,由于要保证每次取的都是个数最多的三个,取完后个数要减一,因此使用优先队列按个数排序;取完后将这三个数字的数量自减1,再进行重复的操作;直到剩下的数字不足三个;


Source Program

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
#define PII pair<int, int>
const int N = 1e5 + 10;
int t, n, m;
map<int, int>mp;
priority_queue<PII,vector<PII>>q;
int ans[N][3], idx;bool cmp(PII a, PII b)
{return a.second > b.second;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin >> n;for (int i = 1; i <= n; i++){int x; cin >> x;mp[x]++;}for (auto& it : mp)q.push(make_pair(it.second, it.first));//大根堆中pair<>按第一关键字排序//<个数,数值>while (q.size() >= 3){PII p[3];for (int i = 0; i < 3; i++){p[i] = q.top();q.pop();p[i].first--;//取出一个,个数减一}for (int i = 0; i < 3; i++)if (p[i].first)q.push(p[i]);//减一若剩余则放回(按第一关键字排序)(贪心)sort(p,p+3,cmp);//取出的p[3]是按个数排序的,需要重新按值排序(题目要求)idx++;for (int i = 0; i < 3; i++)ans[idx][i] = p[i].second;}cout << idx << endl;for (int i = 1; i <= idx; i++)cout << ans[i][0] << " " << ans[i][1] << " " << ans[i][2] << endl;return 0;
}

New Year Snowmen((贪心)map+优先队列)相关推荐

  1. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  2. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

  3. 【牛客 - 369B】小A与任务(贪心,优先队列)

    题干: 链接:https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一 ...

  4. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

  5. 【POJ - 1456】Supermarket (贪心,优先队列 或并查集)

    题干: A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod s ...

  6. LeetCode 1086. 前五科的均分(map + 优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个不同学生的分数列表,请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分. 对于每条 items[i] 记录, items[i][0 ...

  7. LeetCode 451. 根据字符出现频率排序(map+优先队列)

    1. 题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 输入: "tree"输出: "eert" 2. 优先队列解题 先用map统计字符出现次数 ...

  8. 爱奇艺校招map优先队列笔试题字符串的价值

    题目描述 有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值 例如: 字符串"abacaba",里面包括4个'a',2个'b ...

  9. 1705. 吃苹果的最大数目(贪心、优先队列(堆)、哈希表),总之先吃快烂的苹果

    1705. 吃苹果的最大数目 题干 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 ...

最新文章

  1. 一站式论文提升服务,助您顺利发文章!
  2. C# Redis实战(六)
  3. postman怎么传session_十几行代码实现分布式 Session
  4. 关于汇编跟C/C++已经java的内存理解
  5. 家用电器用户行为分析与事件识别_数据产品指北:用户行为分析平台
  6. Linux 探索之旅 | 第五部分第七课:Shell 实现图片展示网页
  7. SQL 存储过程 多条件 分页查询 性能优化
  8. SQLserver C#将图片以二进制方式存储到数据库,再从数据库读出图片
  9. ASP.NET中 Repeater 的使用前台绑定
  10. 三维建模与3D打印 2021-10-12
  11. 二级c语言考试怎么调试程序,计算机二级C语言考试具体内容及分值
  12. 【车间调度】 FJSP的析取图模型
  13. eclipse 中各种小图标含义
  14. 企业中B端常用的十大产品分类详情
  15. 编写程序计算圆的面积和周长
  16. 永恒之塔修改服务器名字,永恒之塔修改称号提升人物各种属性教程
  17. 零粉丝直播带货,日赚两万是真是假?最新抖音直播玩法!
  18. 解决error: inlining failed in call to always_inline ‘int _mm_popcnt_u32(unsigned int)’
  19. maven错误Unknown lifecycle phase “build“. You must specify a valid lifecycle phase or a goal in the fo
  20. java-求指定数组中指定个数的排列组合

热门文章

  1. apicloud 开发app 引用vue+element_ui的方法
  2. 新零售全渠道营销,线上经营,线下成长
  3. 推荐几个前端 模板 框架,收藏
  4. 你需了解:商务送礼的四大规矩
  5. [已解决]阿里云安全组开放端口,宝塔面板仍无法访问
  6. 操作系统镜像资源下载
  7. 获取手机或电脑GPS位置信息(定位平台)
  8. multiprocessing.pool详解
  9. srt转vtt——在线转换工具
  10. ubuntu14.04上安装Mist