hrbust 1176 小陈老师、雪人【map+优先队列】
来源:互联网 发布:php gtk 还有人维护吗 编辑:程序博客网 时间:2024/04/28 23:15
小陈老师、雪人Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 231(55 users)Total Accepted: 79(43 users)Rating: Special Judge: YesDescription东北的冬季,尤其是过年的时候,小陈老师喜欢去堆雪人。
每个雪人主要由三个雪球构成:大雪球、中雪球、小雪球。
他已经准备好了N个雪球,半径分别等于r1, r2, ..., rn。如果要堆一个雪人,就需要三个半径互不相等的雪球。
例如:
三个雪球的半径为1、2、3,能够用来堆一个雪人。但是半径为2、2、3或者2、2、2的三个雪球就不可以。
快帮帮小陈老师,算算他最多能用这些雪球堆多少个雪人。Input对于每组测试数据:
第1行,包含一个整数n(1≤n≤100000) — 雪球的数量。
第2行,包含n个整数 — 雪球的半径r1, r2, ..., rn (1≤ri≤1000000000)。
处理到文件结束Output对于每组测试数据:
第1行,输出最多能堆多少雪人 - k。
接下来k行,每行描述一个雪人,每行用空格分割三个数字分别表示大雪球、中雪球、小雪球的半径。
可以用任何顺序输出每个雪人。如果有多种可行解,输出任意一个即可。Sample Input7
1 2 3 4 5 6 7
3
2 2 3Sample Output2
3 2 1
6 5 4
0
每个雪人主要由三个雪球构成:大雪球、中雪球、小雪球。
他已经准备好了N个雪球,半径分别等于r1, r2, ..., rn。如果要堆一个雪人,就需要三个半径互不相等的雪球。
例如:
三个雪球的半径为1、2、3,能够用来堆一个雪人。但是半径为2、2、3或者2、2、2的三个雪球就不可以。
快帮帮小陈老师,算算他最多能用这些雪球堆多少个雪人。Input对于每组测试数据:
第1行,包含一个整数n(1≤n≤100000) — 雪球的数量。
第2行,包含n个整数 — 雪球的半径r1, r2, ..., rn (1≤ri≤1000000000)。
处理到文件结束Output对于每组测试数据:
第1行,输出最多能堆多少雪人 - k。
接下来k行,每行描述一个雪人,每行用空格分割三个数字分别表示大雪球、中雪球、小雪球的半径。
可以用任何顺序输出每个雪人。如果有多种可行解,输出任意一个即可。Sample Input7
1 2 3 4 5 6 7
3
2 2 3Sample Output2
3 2 1
6 5 4
0
数据比较大,用数组标记一个数出现的次数是不能够满足的,这里需要map,毕竟数据范围10^9、这里为什么要用到优先队列呢?一会再提 。
首先我们要处理数据,一切变量用int就行:
priority_queue<node>s; int cont=0; map<int ,int >p; for(int i=0;i<n;i++) { scanf("%d",&a[i]); p[a[i]]++; } for(int i=0;i<n;i++) { if(p[a[i]]!=0)//不要重复添加进去数据~ { tmp.date=a[i]; tmp.ci=p[a[i]]; s.push(tmp); p[a[i]]=0; } }结构体中有这样两个数据:date,ci分别表示雪球的半径,和这个雪球还有多少个。这里我们举出这样的例子:
1(半径)有1个,2有4个,3有两个,4有三个、
明显最多能够凑出三组:
2 3 4、2 3 4、1 2 4、三组
但是假设我们这里用的优先是雪球数最小优先的话却只能做两组:
1 3 4、2 3 4、两组。
我们当然想要次数多的先用上,所以我们这里结构体优先队列用的是雪球剩下个数从多到少排列的、
最后上完整的代码:
#include<stdio.h>#include<algorithm>#include<queue>#include<map>#include<string.h>using namespace std;struct node{ int date; int ci; friend bool operator<(node a,node b) { return a.ci < b.ci; }}tmp;int a[1000005];int ans[1000005][3];int main(){ int n; while(~scanf("%d",&n)) { priority_queue<node>s; int cont=0; map<int ,int >p; for(int i=0;i<n;i++) { scanf("%d",&a[i]); p[a[i]]++; } for(int i=0;i<n;i++) { if(p[a[i]]!=0) { tmp.date=a[i]; tmp.ci=p[a[i]]; s.push(tmp); p[a[i]]=0; } } node b,c,d; int f[3]; while(!s.empty()) { b=s.top(); s.pop(); b.ci--; f[0]=b.date; if(s.empty())break; c=s.top(); s.pop(); c.ci--; f[1]=c.date; if(s.empty())break; d=s.top(); s.pop(); d.ci--; f[2]=d.date; sort(f,f+3); ans[cont][0]=f[0]; ans[cont][1]=f[1]; ans[cont][2]=f[2]; if(b.ci>0)s.push(b); if(c.ci>0)s.push(c); if(d.ci>0)s.push(d); cont++; } printf("%d\n",cont); for(int i=0;i<cont;i++) { printf("%d %d %d\n",ans[i][2],ans[i][1],ans[i][0]); } }}
0 0
- hrbust 1176 小陈老师、雪人【map+优先队列】
- hrbust 哈理工oj 1176 小陈老师、雪人(优先队列)
- 哈理工OJ 1176 小陈老师、雪人(排序+优先队列模拟)
- hrbust1176小陈老师、雪人 map&&priority queue
- Hrbust 2061消息队列(优先队列应用)
- 哈理工oj/hrbust 2122 旅行【dij+优先队列优化+邻接表+map】
- Hrbust 2319 Number Game【思维+优先队列】
- JAVA雪人小程序
- hrbust 哈理工oj 1246 Windows Message Queue【优先队列】
- hrbust 1313 火影忍者之~静音【优先队列STL+模拟】
- hrbust 1434 Quick out of the Harbour【Bfs+优先队列】
- Hrbust 2171 最佳工厂【贪心+优先队列】经典题型
- 优先队列 小的先出队
- 优先队列一点小用法
- 小雪人推雪球游戏发布
- hrbust 哈理工 oj 1585 公主之魔镜魔镜 (优先队列)
- ZJUT1647 小X的苹果 优先队列
- hdu 2561 第二小整数 (优先队列)
- stroop效应
- 计算x转化成二进制包含1的数量
- Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
- leetcode笔记--Excel Sheet Column Title
- java的Frame和JFrame中的paint方法区别
- hrbust 1176 小陈老师、雪人【map+优先队列】
- 5、Maven的传递性依赖的问题
- 在命令提示符下编译C/C++源文件和运行可执行文件
- KMP算法
- Hdu 1575 Tr A【矩阵快速幂】
- SQLHelper.cs
- Service服务(非绑定与绑定)
- leetcode笔记--Add Digits
- listView或者scrollView中包含gridView或listView的解决方法