题目大意:有n个已知半径的雪球。堆一个雪人需要三个尺寸不同的雪球,问用这些雪球最多能堆多少个雪人?

题目分析:先统计一下每种尺寸的球的个数,从三种最多的种类中各取出一个堆成雪人,这样贪心能保证的到的数目最多。

代码如下:

# include<iostream>
# include<map>
# include<vector>
# include<cstdio>
# include<queue>
# include<algorithm>
using namespace std; struct Node
{
int val,cnt;
Node(int _val,int _cnt):val(_val),cnt(_cnt){}
bool operator < (const Node &a) const{
return cnt<a.cnt;
}
};
int ans[40005][3],n;
map<int,int>mp;
priority_queue<Node>q; void solve()
{
int cnt=0;
while(!q.empty()){
Node a=q.top();
q.pop();
if(q.empty()) break;
Node b=q.top();
q.pop();
if(q.empty()) break;
Node c=q.top();
q.pop();
ans[cnt][0]=a.val;
ans[cnt][1]=b.val;
ans[cnt][2]=c.val;
++cnt;
if(a.cnt-1>0) q.push(Node(a.val,a.cnt-1));
if(b.cnt-1>0) q.push(Node(b.val,b.cnt-1));
if(c.cnt-1>0) q.push(Node(c.val,c.cnt-1));
}
printf("%d\n",cnt);
for(int i=0;i<cnt;++i){
sort(ans[i],ans[i]+3);
printf("%d %d %d\n",ans[i][2],ans[i][1],ans[i][0]);
}
} int main()
{
int a;
while(~scanf("%d",&n))
{
mp.clear();
for(int i=0;i<n;++i){
scanf("%d",&a);
++mp[a];
}
map<int,int>::iterator it;
while(!q.empty()) q.pop();
for(it=mp.begin();it!=mp.end();++it){
q.push(Node(it->first,it->second));
}
solve();
}
return 0;
}

  

CoderForce 140C-New Year Snowmen(贪心)的更多相关文章

  1. [Codeforces 140C] New Year Snowmen

    [题目链接] https://codeforces.com/problemset/problem/140/C [算法] 显然 , 我们每次应优先考虑数量多的雪球 将雪球个数加入堆中 , 每次取出数量前 ...

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

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

  3. CodeForces 140C New Year Snowmen(堆)

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

  4. Codeforce 140C (贪心+优先队列)补题

    C. New Year Snowmen time limit per test2 seconds memory limit per test256 megabytes inputstandard in ...

  5. CoderForce 141C-Queue (贪心+构造)

    题目大意:一个队伍,每个人只记得前面比他高的人的个数x.现在将队伍散开,问能否构造出一支满足条件的队伍,如果能,再给每个人一个满足题意的身高. 题目分析:一个一个排,x越少越先排,如果x比已经排好的人 ...

  6. 【Codeforces 140C】New Year Snowmen

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

  7. Day3-E-New Year Snowmen CodeForces140C

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

  8. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  9. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. hibernate的实现原理以及延迟加载

    Hibernate是怎样实现呢?主要是依据反射机制. 现在以一次数据库查询操作分析Hibernate实现原理. 假设有一个用户表(tbl_user),表中字段有id,name,sex.同时有一个实体类 ...

  2. nginx做http向https的自动跳转

    在访问百度时,在浏览器输入www.baidu.com会自动跳转到https://www.baidu.com不用人工干预,nginx也可以做这样的自动跳转! 首先让nginx服务器监听两个端口,分别是8 ...

  3. 04: Dom

    目录: 参考W3school 1.1 获取标签:直接选择器和间接选择器 1.2 操作标签 1.3 DOM其他操作 1.4 DOM绑定事件的三种方法 1.5 DOM可以绑定的事件 1.1 获取标签:直接 ...

  4. 20145101《Java程序设计》第4周学习总结

    20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...

  5. STM32唯一的ID

    请看如下程序: /*------------------------------------------------------------------------------------------ ...

  6. STM32系统时钟为什么没有定义呢

    对于使用3.5版本库开发的STM32学习者 有时候不清楚为什么没有时钟定义 那么我们就简单的讲解下吧: 1,函数从启动文件开始运行(汇编文件) 2,若是hd.s 请看151行LDR     R0, = ...

  7. UVa 12661 Funny Car Racing - spfa

    很简单的一道最短路问题.分情况处理赛道的打开和关闭. Code /** * UVa * Problem#12661 * Accepted * Time:50ms */ #include<iost ...

  8. Harmonic Number (调和级数+欧拉常数)题解

    Harmonic Number In mathematics, the nth harmonic number is the sum of the reciprocals of the first n ...

  9. BZOJ1632: [Usaco2007 Feb]Lilypad Pond SPFA+最短路计数

    Description 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是 ...

  10. java 监控工具 jconsole

    如图