[题目链接]

https://codeforces.com/problemset/problem/140/C

[算法]

显然 , 我们每次应优先考虑数量多的雪球

将雪球个数加入堆中 , 每次取出数量前三大的雪球 , 贪心地将它们分到一个组中即可

时间复杂度 : O(N log N)

[代码]

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + ; struct info
{
int v1 , v2 , v3;
} ans[MAXN]; int n , tot;
int r[MAXN];
map< int,int > mp;
priority_queue< pair<int,int> > q; template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
} int main()
{ read(n);
for (int i = ; i <= n; i++)
{
read(r[i]);
mp[r[i]]++;
}
for (map< int,int > :: iterator it = mp.begin(); it != mp.end(); it++) q.push(make_pair(it -> second,it -> first));
while ((int)q.size() >= )
{
pair<int,int> a = q.top();
q.pop();
pair<int,int> b = q.top();
q.pop();
pair<int,int> c = q.top();
q.pop();
ans[++tot] = (info){a.second,b.second,c.second};
if (a.first > ) q.push(make_pair(a.first - ,a.second));
if (b.first > ) q.push(make_pair(b.first - ,b.second));
if (c.first > ) q.push(make_pair(c.first - ,c.second));
}
printf("%d\n",tot);
for (int i = ; i <= tot; i++)
{
if (ans[i].v1 < ans[i].v2) swap(ans[i].v1,ans[i].v2);
if (ans[i].v1 < ans[i].v3) swap(ans[i].v1,ans[i].v3);
if (ans[i].v2 < ans[i].v3) swap(ans[i].v2,ans[i].v3);
printf("%d %d %d\n",ans[i].v1,ans[i].v2,ans[i].v3);
} return ; }

[Codeforces 140C] New Year Snowmen的更多相关文章

  1. CodeForces 140C New Year Snowmen(堆)

    题面 CodeForces 题解 因为要保证两两不同,所以不能单纯的开堆来维护,堆维护一个二元组,个数为第一关键字,编号为第二关键字,对于一个相同的颜色,统计一下这个颜色的个数再用堆来维护就好了. # ...

  2. 【Codeforces 140C】New Year Snowmen

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 每次都选择剩余个数最多的3个不同数字组成一组. 优先消耗剩余个数多的数字 这样能尽量让剩余的数字总数比较多,从而更加可能得到更多的3个组合 [ ...

  3. CodeForces 140C New Year Snowm

    题目链接:http://codeforces.com/contest/140/problem/C 题目大意: 有n个雪球(半径为:r1,r2,r3.....rn):一个雪人要三个雪球.但是要求半径两两 ...

  4. Codeforces 140C(二分、构造)

    要点 可以贪心选数量最多的那三个构造 二分的话里面的check我不太会.正解是既然当前答案为\(k\)个,那每个物品最多只会出现\(k\)次,多余的丢掉,剩下的总数如果大于等于\(3k\)则true. ...

  5. CodeForces #100 C 贪心+STL

    题目链接:CodeForces #100  C 题意:现在给出n个snowball的半径,3个半径严格递增或递减的snowball,可以组成1个snowmen.问最多能组成多少个snowmen.并且按 ...

  6. [短期持续更新]Codeforces 构造题一览

    说实话我觉得做这种题很没意思(不够硬核), 可是人有短板终究是要补的...起码这种类型补起来相对简单 所以还是把先前准备好的专题放下吧,做点实现上比较休闲的题 ps.为了精简篇幅,代码全部丢到ubun ...

  7. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  8. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  9. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

随机推荐

  1. 微信小程序 video组件 不随页面滚动

    1.页面初始化(滚动前)时,video所在位置 2.页面滚动后,video视频组件所在位置 看了别人家的小程序并不会出现这种状况.最后检查发现,是页面包裹层设置了 height:100% 导致的 顺便 ...

  2. 集训第四周(高效算法设计)K题 (滑窗问题)

    UVA 11572 唯一的雪花 题意:给你从1到n的数组,要求求得其中的最长连续不重复子序列,经典的滑窗问题,方法是维护一个窗口,设置左框和右框,然后不断的进行维护和更新 方法一: #include& ...

  3. python字典及相关操作

    1.字典 1.1.字典特性 字典是一种key-value的数据类型.key必须可hash,必须为不可变数据类型,且必须是唯一的:value可以存放任意多个值.可修改.可以不唯一:字典是无序的,通过ke ...

  4. c++学习第一课--输入/输出

    1,程序: #include<iostream> int main() {     std::cout<<"Enter two numbers:"<& ...

  5. 洛谷 P2335 SDOI 2005 毒瘤 位图(也补上注释了)

    #include<iostream> #include<cstdio> #include<queue> #include<cstring> using ...

  6. java连接MySQL数据库并读取内容

    package sqldemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe ...

  7. 九度oj 题目1047:素数判定

    题目1047:素数判定 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:12466 解决:5644 题目描述: 给定一个数n,要求判断其是否为素数(0,1,负数都是非素数). 输入: 测试数 ...

  8. Maven 引入外部包

    当需要从外部引入一个包(譬如说读写Excel 的POI  jar 包 ), 不需要手动地去官网下载一个包然后粘贴到相应的地方. 只需要把Java 工程 转为 Maven 工程 ( 在工程上右键 > ...

  9. 2018/2/15 ES Beats的学习笔记

    Beats其实是几种服务的统称(你也可以把收集到的数据存储到别的数据源,不一定非要ES),这几种服务分别是: 1.PacketBeat 通过抓包的方式来监控一些服务.如:HTTP,DNS,Redis, ...

  10. 【ZJOI2017 Round1后记】

    2017.4.1: NOIP+Round1综合成绩出来,标准分离续命线差了80分,果然还是联赛坑挖太大了…… 不管怎么说能续命的话还是要试一下的…… 发毒誓:Round2前不打手游,不看NGA,不看星 ...