CF140C.New Year Snowmen(优先队列+map)
题目链接:https://vjudge.net/contest/376896#problem/D
题意:给出n个数,询问能排出多少个长度为三的纯单调序列,顺序可以打乱,一个数只可以用一次
阶梯思路:
先用map函数记录每个数出现的次数,然后遍历map数组,将各个数对应的个数 放入优先队列中,优先队列按数量从大到小排序,即数量大的数先选择。然后用a、b、c数组分别保存在三个数,k保存数量
注意map函数遍历的方法,大的数值统计个数时候很实用
it->first 是坐标i,it->second是map[i]
for(auto it =m.begin();it!=m.end();it++){q.push(P(it->second,it->first));}
注意
/*int x=q1.first; int y=q2.first; int z=q3.first;x-=z; y-=z;while(z--){a[k]=q1.second;b[k]=q2.second;c[k++]=q3.second;}if(x>0){q1.first=x;q.push(q1);}if(y>0){q2.first=y;q.push(q2);}*/q1.first--;q2.first--;q3.first--;a[k]=q1.second;b[k]=q2.second;c[k++]=q3.second;if(q1.first>0) q.push(q1);if(q2.first>0) q.push(q2);if(q3.first>0) q.push(q3);
注释里的方法是错误的,不可以一次把所有大的全部取出。
以 11 22 3 4 5为例,如果先把345选用那么会浪费很多组,不如 1 2 3 、1 2 4来的多
再以 111 222 333 44 55 为例,如果按注释的方法先把111 222 333 全部取出,那么44 55 就浪费了,而当我们先去 11 22 33 时,剩下来 44 55 1 2 3按照 1 4 5、 2 4 5的方法来取,得到的方案数更多
#include<iostream>
#include<queue>
#include<cstdio>
#include<string.h>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
typedef pair<int,int> P;
struct cmp{bool operator ()(P a,P b){return (a.first==b.first)?(a.second<b.second):(a.first<b.first);}
};
int n;
int r[110000];
int a[110000],b[110000],c[110000];
map<int,int> m;
priority_queue<P,vector<P>,cmp> q;
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&r[i]);m[r[i]]++;}for(auto it =m.begin();it!=m.end();it++){q.push(P(it->second,it->first));}int k=0;while(q.size()>=3){P q1=q.top(); q.pop();P q2=q.top(); q.pop();P q3=q.top(); q.pop();/*int x=q1.first; int y=q2.first; int z=q3.first;x-=z; y-=z;while(z--){a[k]=q1.second;b[k]=q2.second;c[k++]=q3.second;}if(x>0){q1.first=x;q.push(q1);}if(y>0){q2.first=y;q.push(q2);}*/q1.first--;q2.first--;q3.first--;a[k]=q1.second;b[k]=q2.second;c[k++]=q3.second;if(q1.first>0) q.push(q1);if(q2.first>0) q.push(q2);if(q3.first>0) q.push(q3);}printf("%d\n",k);for(int i=0;i<k;i++){if(a[i]<b[i]){int tmp=a[i];a[i]=b[i];b[i]=tmp;}if(a[i]<c[i]){ int tmp=a[i];a[i]=c[i];c[i]=tmp;}if(b[i]<c[i]){int tmp=b[i];b[i]=c[i];c[i]=tmp;}printf("%d %d %d\n",a[i],b[i],c[i]);}return 0;
}
CF140C.New Year Snowmen(优先队列+map)相关推荐
- CF140C New Year Snowmen(贪心+优先队列)
CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...
- 一份自己整理的不太详细的常见面试题
1.java基础 1.解释下什么是面向对象?面向对象和面向过程的区别? 面向对象是一种基于面向过程的编程思想,是面向现实世界模型的自然延申,这是一种"万物皆对象"的编程思想.由 ...
- 【机试】2011-2020年复旦大学考研复试机试真题
题型分布目录 一.DP问题 [2011-1]DP-最长公共子序列LCS [2014-2]DP-字符串的编辑距离 [2014-4]DP-Hanoi 塔 [2016-1]DP-求最大连续公共字串长度 [2 ...
- L3-1 千手观音【拓扑排序】
人类喜欢用 10 进制,大概是因为人类有一双手 10 根手指用于计数.于是在千手观音的世界里,数字都是 10 000 进制的,因为每位观音有 1 000 双手 -- 千手观音们的每一根手指都对应一个符 ...
- New Year Snowmen((贪心)map+优先队列)
文章目录 一.题目 二.解题步骤 1.题意 2.思路 Source Program 一.题目 New Year Snowmen:传送门 Examples Input 7 1 2 3 4 5 6 7 O ...
- 贪心(优先队列) - New Year Snowmen - CodeForces - 140C
贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...
- CF140C-New Year Snowmen【优先队列】
正题 题目链接:https://www.luogu.com.cn/problem/CF140C 题目大意 nnn个雪球,一个雪人需要用333个不同大小的雪球堆起,求最多雪人. 解题思路 我们每次拿相同 ...
- LeetCode 1086. 前五科的均分(map + 优先队列)
文章目录 1. 题目 2. 解题 1. 题目 给你一个不同学生的分数列表,请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分. 对于每条 items[i] 记录, items[i][0 ...
- LeetCode 451. 根据字符出现频率排序(map+优先队列)
1. 题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 输入: "tree"输出: "eert" 2. 优先队列解题 先用map统计字符出现次数 ...
最新文章
- Java多态性Polymorphic
- 美国科技界高度关注中国科技创新进展
- c语言题库杭电,C语言杭电18级B卷试题答案.doc
- 子线程适当Sleep的重要性
- Go的channel与map是否并发安全以及原因
- 使用SSH密钥对给你的阿里云ECS加把安全锁
- php同时上传多个数据,怎样一次上传多个数据流
- java 常量变量使用_java常量和变量入门教程
- java运算符 —(5)
- 面向对象软件设计原则
- 微信小程序最全Tab选项卡,你要的功能都在这里啦
- “三只松鼠”为何一天能卖一亿元
- pyodbc linux 乱码,python-无法在Linux上安装pyodbc
- 操作系统from清华大学向勇,陈渝 笔记(一)绪论
- Android自动化测试之Monkey
- Kernel那些事儿之内存管理(6) --- 衣带渐宽终不悔(下)
- 笔记本双网卡带宽叠加上网
- Unity3D实现3D立体游戏原理及过程
- 做ARM的一些前后经历——转载的
- 【python】python代码加密与License控制
热门文章
- tp5.1 系统常量
- CISCO WLC的配置备份与导入
- 17 RFID卡的读写
- 北京冬奥会 向世界展示了什么
- cisco ASA ios升级或恢复
- 需要一个自习室系统,包括收费、灯控、会员管理、微信及前端订座、一卡通终端,会做的私信我,有偿。
- django实现证件照换底色后端和小程序(第三周学习记录)
- 【ESP 保姆级教程】疯狂传感器篇 —— 案例:Mega + ESP8266 + MQ2烟雾传感器 + MQ3酒精传感器 + MQ7一氧化碳传感器 + OLED +巴法云平台
- PMBOK(第4版)--项目管理九大知识领域的【输入】、【工具与技术】、【输出】一览表
- 房地产类软件实战教程,如何写好房地产类软文