【CF1157F】Maximum Balanced Circle 求一个相邻元素之间绝对值为小于1的最大环
题目:
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的最大环的更多相关文章
- CF1157F Maximum Balanced Circle
思路 观察到答案一定是连续的一段下凸函数或者上凸函数 直接模拟找出即可 时间复杂度为\(O(n)\) 代码 #include <cstdio> #include <cstring&g ...
- Codeforces Round #555 (Div. 3) F. Maximum Balanced Circle
F. Maximum Balanced Circle 题目链接 题意 给出\(n\)个数,现在要从中选出最多的数\(b_i,b_{i+1},\cdots,b_k\),将这些数连成一个环,要求两两相邻的 ...
- 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 ...
- 日常踩坑 — 相邻元素之间的margin合并问题。
踩坑:使用v-for渲染的组件,当然图中的id已经换成class,还是没有解决这个问题,于是各种查找资料,我就不信简单的CSS问题这么难解决! v-for渲染组件级传值: <div class= ...
- 相邻元素之间的margin合并问题
任何元素都可以设置border 设置宽高可能无效 行内元素设置padding,margin上下是无效的,左右是有效的 外边距合并:指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距 ...
- JS求一个数组元素的最小公倍数
求几个数的最小公倍数就是先求出前两个数的最小公倍数,然后再把这个最小公倍数跟第三个数放在一起来求最小公倍数,如此类推... var dbList = []; //两个数的最小公倍数 function ...
- 【CF1157F】Maximum Balanced Circle
题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1. 题解:集合问题与序列顺序无关,因此可以先将序 ...
- 偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
今天申请了博客园账号,在下班后阅览博客时发现了一个关于百度面试题探讨的博客(其实是个很基础的问题),此博客url为:http://www.blogjava.net/nokiaguy/archive/2 ...
- 分治法求一个N个元素数组的逆序数
背景 逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...
随机推荐
- jquery.cookie 介绍 和 用法
1.依赖jQuery库 2.浏览器兼容性情况 3.下载 官方github:https://github.com/carhartl/jquery-cookie 4.使用 创建一个整站cookie $.c ...
- 13 Calculating Expected Offspring
Problem For a random variable XX taking integer values between 1 and nn, the expected value of XX is ...
- KbmMW 4.40.00 测试发布
经过漫长的等待,支持移动开发的kbmmw 4.40.00 终于发布了,这次不但支持各个平台的开发, 而且增加了认证管理器等很多新特性,非常值得升级.具体见下表. 4.40.00 BETA 1 Oct ...
- web应用安全权威指南(文摘)
第1章 什么是web应用的安全隐患 第3章 Web安全基础,HTTP,会话管理,同源策略 content_length 字节数 content_type mime类型 百分号编码 referer :请 ...
- 从原理上理解Base64编码
开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...
- 看图说说JVM新生代垃圾收集器
- Codeforces758D Ability To Convert 2017-01-20 10:29 231人阅读 评论(0) 收藏
D. Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standar ...
- CentOS将普通用户加入管理员组
将用户username加入wheel组: usermod -aG wheel username 将普通用户username加入root组: usermod -aG sudo username 永久生效 ...
- C# superGridControl 样式设置、加载数据、获取数据
样式设置 superGridControl1.PrimaryGrid.SelectionGranularity = SelectionGranularity.Cell; //设置选中样式 单元格.整列 ...
- WebBrowser控件支持WebSocket
修改html页面,在Header标签中添加如下标签: <meta http-equiv="X-UA-Compatible"content="IE=edge" ...