【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个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...
随机推荐
- ToList和ToDataTable(其中也有反射的知识)
using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Refle ...
- 静态HTML服务器
主要代码 #pragma once#include "pre.h"#include <thread> NAMESPACE(DEF) class Socket {publ ...
- 自定义animate()引起的动画叠加
当用户快速在某个元素多次执行动画时,会造成动画累积的现象.这时,就需要引入动画状态这个概念.判断元素是否处于动画状态中,如果处于,则不添加新动画 常常用于在设置动画之前未清除动画,造成的动画叠加.解决 ...
- ajax 测试
在学习SpringMVC的过程中,接触到ajax,顺便复习一下前面学习到的知识! 这篇博客中讲的比较详细 http://www.cnblogs.com/lsnproj/archive/2012/02/ ...
- windows下Apache的虚拟主机配置
1.Apache虚拟主机: 在Apache上有关于虚拟主机的具体说明,具体可以参考Apache手册,这里简单的说一下虚拟主机主要分为两种: 1.基于主机名的虚拟主机(一个IP地址,多个网站) 2.基于 ...
- 《Forward团队-爬虫豆瓣top250项目-开发文档》
码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...
- 企业搜索引擎开发之连接器connector(二十四)
本人在上文中提到,连接器实现了两种事件依赖的机制 ,其一是我们手动操作连接器实例时:其二是由连接器的自动更新机制 上文中分析了连接器的自动更新机制,即定时器执行定时任务 那么,如果我们手动操作连接器实 ...
- spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
转载自 http://www.blogjava.net/Todd/archive/2010/04/22/295112.html 方法一:在初始化时保存ApplicationContext对象 代码: ...
- Android-openFileInput openFileOutput
Android设计了一套可以操作自身APP目录文件对API openFileInput openFileOutput,读取只需传入文件名,写入需要传入文件名 与 权限模式 界面: 布局代码: < ...
- Cockroachdb 一、系统环境
cockroachdb 一.系统环境 **硬件** 最低标准 a 至少3个节点保证集群可用副本 b 每个节点至少1CPU ,2GB RAM.增加资源配置可支持处理更多的数据,负载,高并发,高性能. 最 ...