Offer收割_4
1.水题
2.BFS宽搜(使用优先队列priority_queue)
4.题意:给数组a。要求重排列数组,使得数组中的任意相邻的两个元素不同。如果存在多个方案,那么选择字典序最小的方案。
如果不能满足如上要求,输出“-1”。
思路:使用贪心策略。每次如果剩下的元素刚好达到可以分割当前Num[i]的数目下限个元素的时候,那么此时就必须安排num[i];
否则,安排最小的元素。且和上一个元素不同。
使用map来统计数值出现的个数, 使用set<pair, pair>来记录map中的<second, first> <=> <cnt, num>。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
#include <set>
#include <map> using namespace std; const int Maxn = ;
int n, a[Maxn];
map<int, int>cnt;
set<pair<int, int>>S; int main()
{
cin>>n;
for(int i = ; i < n; i ++){
scanf("%d",&a[i]);
cnt[a[i]] ++;
}
map<int, int>::iterator it;
for(it = cnt.begin(); it != cnt.end(); it ++){
S.insert(make_pair(it->second, it->first));
}
if((--S.end())->first * - > n){
cout<<"-1"<<endl;
return ;
}
int pre_x = -;
for(int i = ; i <= n; i ++){
int x;
if((--S.end())->first * - == (n + i - )){
x = (--S.end())->second;
}else{
it = cnt.begin();
while(it->first == pre_x && it != cnt.end()){
it ++;
}
x = it->first;
}
S.erase(make_pair(cnt[x], x));
cnt[x] --;
if(cnt[x] > ){
S.insert(make_pair(cnt[x], x));
}else{
cnt.erase(x);
}
printf("%d%c",x, i == n?'\n':' ');
pre_x = x;
}
return ;
}
Offer收割_4的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- 从谷歌面试翻车到offer收割的心路历程
首先声明,这只是我的播客随感,其中无法避免有一些个人色彩的见解,请不要在意,我尊敬任何的互联网公司,尊敬研究生期间的老师同学,我只希望给在求学路上的CS同学一些启发. 先介绍一下背景,我是ACM铜牌退 ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- CCCC 以及 hihocoder offer收割赛11 ~~~
CCCC 真的很蒙 ,没有队服,没有狗牌,服务器崩溃到14:10 才开始比赛...(黑人问号 开始前,发现旁边是西交老大吴航,mad~各种紧张.看着大佬疯狂的敲宏定义就很怕啊.100多行,一行头 ...
- [Offer收割]编程练习赛3 - 题目3 : 智力竞赛
智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...
- [Offer收割]编程练习赛5-1 小Ho的防护盾
#1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...
- hiho #1272 买零食 [Offer收割]编程练习赛2
#1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...
随机推荐
- 恶补数论(二) Baby-Step-Giant-Step 大步小步求离散模对数
知识概述 好吧,我承认这是我初三寒假就听过的知识,然而我现在早就高一了(又是寒假,只不过我已经在省选了...) 额,这是求离散模对数的一种算法 也就是求满足方程a^x≡b(mod p)的最小的x(其中 ...
- sublime3注册码
TwitterInc User License EA7E 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 ...
- 阿里云服务器Ubuntu 16.04 3安装mysql
.更新系统 apt-get update [注意:要在root用户下] .安装mysql-server apt-get install mysql-serverapt-get install mysq ...
- Codeforces Round #234 (Div. 2)
A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...
- docker重新打包MySQL5.7镜像
1:先下载MySQL镜像 # docker pull mysql:5.7 2:运行镜像生成容器 # docker run --name mysql -p 3306:3306 -e MYSQL\_ ...
- MySQL: 打开binlog选项后无法重启MySQL
binlog目录权限不足导致,用chown mysql:mysql <log folder>即可解决此问题.
- Snail—UI学习之自己定义通知NSNotification
背景是:一个界面跳转到第二个界面 然后 第一个界面发了一个通知 然后第二个界面收到这个通知后 把里面的数据取出来 在RootViewController.m中写入以下代码 #import " ...
- java线程和线程池的使用
java线程和线程池 一.创建多线程的方式 java多线程非经常见.怎样使用多线程,怎样创建线程.java中有两种方式,第一种是让自己的类实现Runnable接口.另外一种是让自己的类继承Thread ...
- C# 生成pdf文件客户端下载
itextsharp.dll 下载:http://sourceforge.net/projects/itextsharp/ 程序需引用:itextsharp.dll,itextsharp.pdfa.d ...
- Java进程堆外内存(off heap)大小
一.使用ByteBuffer.allocateDirect分配的off heap内存大小 本机进程 在Jvisualvm中安装 Mbeans插件.然后查看java.nio/BufferPool/dir ...