题目:

https://codeforces.com/contest/1157/problem/F

给出一个序列 , 我们要从序列里面挑出一些数构造成一个相邻元素之间绝对值为小于1的最大环 , 挑选的数不要求连续

分析:

不要求连续 , 我们可以先排个小序

对于一个满足条件的环我们可以这样的构造 : al , al+1 , al+2 .... ar , ar-1 , ar-2 ,...al+1

因为这样肯定是一个满足条件的结构 , 即:除了 al,aral,ar 之外的其他所有值应该都有至少两个。因此,开一个桶记录一下每个元素出现的次数,并对原序列进行去重 ; 我们还发现对于1 2 3 2   , 在1...2 这里面添加2的个数是没有什么影响的;使用双指针法,每次都找到 1 出现的位置,统计答案并更新答案即可。

#include<bits/stdc++.h>
using namespace std;
int n;
int a[];
int cnt[];
int tot;
int main()
{
scanf("%d",&n);
for(int i= ; i<=n ; i++)
{
scanf("%d",&a[i]);
cnt[a[i]]++;
}
sort(a+,a++n);
tot=unique(a+,a++n)-(a+); int ans=cnt[a[]] , head= , tail=;
int anshead=,anstail=;
while(head<=tot)
{
tail=head+;
int sum=cnt[a[head]];
while(tail<=tot && a[tail]-a[tail-]== && cnt[a[tail]]>=)
{
sum+=cnt[a[tail]];
tail++;
}
int cr=tail-;
if(tail<=tot&&a[tail]-a[tail-]==) sum+=cnt[a[tail]],cr=tail;
if(sum>ans)
{
ans=sum;
anshead=head;
anstail=cr;
}
head=tail;
}
printf("%d\n",ans);
for(int i= ; i<=cnt[a[anshead]];i++)printf("%d ",a[anshead]);
for(int i=anshead+ ; i<anstail ; i++)
{
for(int j= ; j<cnt[a[i]];j++)
printf("%d ",a[i]);
}
if(anshead!=anstail) for(int i= ; i<=cnt[a[anstail]] ; i++) printf("%d ",a[anstail]);
for(int i=anstail- ; i>=anshead+;i--) printf("%d ",a[i]);
puts(""); }

参考:https://www.cnblogs.com/wzj-xhjbk/p/10781217.html

【CF1157F】Maximum Balanced Circle 求一个相邻元素之间绝对值为小于1的最大环的更多相关文章

  1. CF1157F Maximum Balanced Circle

    思路 观察到答案一定是连续的一段下凸函数或者上凸函数 直接模拟找出即可 时间复杂度为\(O(n)\) 代码 #include <cstdio> #include <cstring&g ...

  2. Codeforces Round #555 (Div. 3) F. Maximum Balanced Circle

    F. Maximum Balanced Circle 题目链接 题意 给出\(n\)个数,现在要从中选出最多的数\(b_i,b_{i+1},\cdots,b_k\),将这些数连成一个环,要求两两相邻的 ...

  3. Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】

    A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  4. 日常踩坑 — 相邻元素之间的margin合并问题。

    踩坑:使用v-for渲染的组件,当然图中的id已经换成class,还是没有解决这个问题,于是各种查找资料,我就不信简单的CSS问题这么难解决! v-for渲染组件级传值: <div class= ...

  5. 相邻元素之间的margin合并问题

    任何元素都可以设置border 设置宽高可能无效 行内元素设置padding,margin上下是无效的,左右是有效的 外边距合并:指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距 ...

  6. JS求一个数组元素的最小公倍数

    求几个数的最小公倍数就是先求出前两个数的最小公倍数,然后再把这个最小公倍数跟第三个数放在一起来求最小公倍数,如此类推... var dbList = []; //两个数的最小公倍数 function ...

  7. 【CF1157F】Maximum Balanced Circle

    题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1. 题解:集合问题与序列顺序无关,因此可以先将序 ...

  8. 偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

    今天申请了博客园账号,在下班后阅览博客时发现了一个关于百度面试题探讨的博客(其实是个很基础的问题),此博客url为:http://www.blogjava.net/nokiaguy/archive/2 ...

  9. 分治法求一个N个元素数组的逆序数

    背景  逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...

随机推荐

  1. Facebook对MySQL全表扫描性能的改进

    原文博客如下: http://yoshinorimatsunobu.blogspot.com/2013/10/making-full-table-scan-10x-faster-in.html 如下是 ...

  2. ACTIVITI 5.14事件监听器的BUG

    在ACTIVITI 5.14中,测试内部子流程时发现事件定义的事件监听器不能触发. <activiti:executionListener event="start" del ...

  3. Monokai风格的EditPlus配色方案

    EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: [Option ...

  4. 前端福利之HTML5 UTF-8 中文乱码(转)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. python使用git进行版本控制-分支管理

    1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...

  6. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  7. linux每天一小步---ls命令详解

    1 命令功能: 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 2 命令语法: ls [选项] [目录名]     #注:[]中的内容为非必选项 3 命令选项: -a 列出目录下 ...

  8. Mixin模式

    Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现. Mixin是掺合,混合,糅合的意思,即可以就任意一个对象的全部或部分属性拷贝到另一个对象上. 从提供的接口 ...

  9. 51nod1459迷宫问题—(迪杰斯特拉)

    1459 迷宫游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间, ...

  10. svn cleanup失败解决方法

    一般网上给出的解决方法是使用sqlite清空.svn\wc.db的工作队列表(work_queue) 后来发现都打不开wc.db 百度一下: 保留当前目录源码,删除 .svn(隐藏)文件夹,重新che ...