Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)
u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高
二分答案(这我倒是想到了),检验最上面一层的数是否 \(\ge x\)。
我们将最底下一层的数中 \(\ge x\) 的 \(a_i\) 设为 \(1\),\(<x\) 的设为 \(0\),那么原题可以转化为每次操作对于相邻三个数,如果 \(1\) 的个数 \(\ge 2\),就在该位上填一个 \(1\),否则在该位上填一个 \(0\),求最终顶上的数是 \(0\) 还是 \(1\)。
不难发现经过二分答案这个转化,我们将原来值域在 \([1,2n-1]\) 范围内的问题缩小为值域在 \([0,1]\) 范围内的问题,可直接做似乎还是有些棘手,我们不妨进一步探究这里面的规律。
我们手玩几组数据即可发现一个性质,如果相邻两个数都是 \(1\),那么它上面所有数都是 \(1\),反正如果相邻两个数都是 \(0\),那么它上面所有数都是 \(0\),并且如果 \(i\) 满足 \(a_{i}=a_{i+1}=a_{i-2}=1\),那么到了上一层第 \(i-1\) 列也会变成 \(1\),可以看作这个 \(1\) “蔓延”到了第 \(i-1\) 列,于是我们猜测,第 \(n\) 层的数一定与距离中心点最近的 \(a_{i}=a_{i+1}\) 的 \(i\) 有关,因为它能最快“蔓延”到第 \(n\) 列。
事实果真如此。
这里稍微证明一下。记 \(i=n+p\) 为距离中心点最近的满足 \(a_i=a_{i+1}\) 的 \(i\),其中 \(p\ge 0\)(\(p<0\) 也同理,翻转一下就行了),如果 \(p=0\) 那显然根据之前的结论,第 \(n\) 列的数就是 \(a_n\),符合题意。否则,由于 \(i=n+p\) 为最近的满足 \(a_i=a_{i+1}\) 的 \(i\),必然有 \([n-p,n+p]\) 部分的 \(a_i\) 为 \(01\) 间隔分布,即 \(a_{n+p-2}=a_{n+p-4}=a_{n+p-6}=\cdots=a_{n-p+2}=a_{n-p}=a_{n+p}\),\(a_{n+p-1}=a_{n+p-3}=a_{n+p-5}=\cdots=a_{n-p+1}=1-a_{n+p}\),由 \(a_{n+p-2}=a_{n+p}=a_{n+p+1}\) 可知从下往上数第二行第 \(n+p-1\) 位置上的值也是 \(a_{n+p}\),相当于 \(a_{n+p}\) 向左蔓延了一格。而显然对于 \(01\) 分布的序列,进行一遍取中位数操作之后还是 \(01\) 间隔分布的,因此到第二行可以看作 \(p'=p-1\) 的版本继续递归下去,归纳可得最终的数就是 \(a_{n+p}\)。
有人可能会问:如果存在 \(p\) 使得 \(i=n+p\) 为距离中心点最近的满足 \(a_i=a_{i+1}\) 的 \(i\),满足 \(a_{n+p}=a_{n+p+1}\ne a_{n-p}=a_{n-p-1}\) 怎么办呢?稍微动点脑子即可知道这种情况是不可能的,因为根据上面的证明过程可知 \([n-p,n+p]\) 是 \(01\) 间隔分布的,因此 \(\forall x,y\in[n-p,n+p]\),若 \(|x-y|\) 为偶数,则 \(a_x=a_y\),反之 \(a_x\ne a_y\),而 \(n-p\equiv n+p\pmod{2}\),故 \(a_{n-p}=a_{n+p}\),因此不会出现这种情况。
最后特判整个 \(a\) 数组就是 \(01\) 间隔分布的情况,此时最上面一层的数就是 \(a_{2n-1}\)。
const int MAXN=1e5;
int n,a[MAXN*2+5],b[MAXN*2+5];
bool check(int x){
for(int i=1;i<(n<<1);i++) b[i]=(a[i]>=x);
for(int i=0;i<n-1;i++){
if(b[n+i]==b[n+i+1]) return b[n+i];
if(b[n-i]==b[n-i-1]) return b[n-i];
} return b[1];
}
int main(){
scanf("%d",&n);
for(int i=1;i<(n<<1);i++) scanf("%d",&a[i]);
int l=1,r=(n<<1)-1,mid,x=-114514;
while(l<=r) (check(mid=l+r>>1))?(x=mid,l=mid+1):(r=mid-1);
printf("%d\n",x);return 0;
}
Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)的更多相关文章
- AtCoder Grand Contest 006
AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...
- AtCoder Grand Contest 019 B - Reverse and Compare【思维】
AtCoder Grand Contest 019 B - Reverse and Compare 题意:给定字符串,可以选定任意i.j且i<=j(当然i==j时没啥卵用),然后翻转i到j的字符 ...
- AtCoder Grand Contest 006 C:Rabbit Exercise
题目传送门:https://agc006.contest.atcoder.jp/tasks/agc006_c 题目翻译 数轴上有\(N\)只兔子,从\(1\)到\(N\)编号,每只兔子初始位置是\(x ...
- Atcoder Grand Contest 022 E - Median Replace(dp)
Atcoder 题面传送门 & 洛谷题面传送门 首先考虑对于固定的 01 串怎样计算它是否可以通过将三个连续的 \(0\) 或 \(1\) 替换为其中位数得到.我们考虑单调栈,新建一个栈,栈底 ...
- AtCoder Grand Contest 006 (AGC006) C - Rabbit Exercise 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC006C.html 题目传送门 - AGC006C 题意 有 $n$ 个兔子,从 $1$ 到 $n$ 编号, ...
- AtCoder Grand Contest 006 F - Blackout
Description 在 \(n*n\) 的棋盘上给出 \(m\) 个黑点,若 \((x,y)\),\((y,z)\) 都是黑点,那么 \((z,x)\) 也会变成黑点,求最后黑点的数量 题面 So ...
- [Atcoder Grand Contest 006 F][AGC006F] Blackout [染色]
题面 传送门 思路 首先,这个涂黑的方法我们来优化一下模型(毕竟当前这个放到矩形里面,你并看不出来什么规律qwq) 我们令每个行/列编号为一个点,令边(x,y)表示一条从x到y的有向边 那么显然只要有 ...
- AtCoder Grand Contest 006 题解
传送门 \(A\) 咕咕 const int N=105; char s[N],t[N];int n; inline bool eq(R int k){fp(i,1,k)if(s[n-k+i]!=t[ ...
- Atcoder Grand Contest 005 E - Sugigma: The Showdown(思维题)
洛谷题面传送门 & Atcoder 题面传送门 记先手移动棋子的树为红树,后手移动棋子的树为蓝树. 首先考虑一个性质,就是如果与当前红色棋子所在的点相连的边中存在一条边,满足这条边的两个端点在 ...
随机推荐
- OO--第三单元规格化设计 博客作业
OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...
- USB OTG原理和 ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了 电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机 ...
- Hdu P1394 Minimum Inversion Number | 权值线段树
题目链接 题目翻译: 约定数字序列a1,a2,...,an的反转数是满足i<j和ai>aj的数对(ai,aj)的数量. 对于给定的数字序列a1,a2,...,an,如果我们将第1到m个数字 ...
- Tarjan算法离线 求 LCA(最近公共祖先)
本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...
- zabbix 监控redis 挂掉自动重启 并发送企业微信
1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...
- RocketMQ Consumer 启动时都干了些啥?
可能我们对 RocketMQ 的消费者认知乍一想很简单,就是一个拿来消费消息的客户端而已,你只需要指定对应的 Topic 和 ConsumerGroup,剩下的就是只需要: 接收消息 处理消息 就完事 ...
- .NET 生态系统的蜕变之 .NET 6云原生
云原生的英文名是cloud native,native 就是土著的意思,也就是土著对当地的环境是非常适应的,在云的环境和传统的数据中心是非常不同的,云原生就是要用的云的技术来构建应用, 利用云的技术来 ...
- ELK集群之elasticsearch(3)
Elasticsearch-基础介绍及索引原理分析 介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引 ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- LeetCode刷题 DFS+回溯
一.DFS介绍 二.LeetCode 实战 LC 17. 电话号码的字母组合 解法思路 解题步骤 代码 LC 79. 单词搜索 解题思路 解题步骤 代码 LC 46. 全排列 解题思路一 解题步骤 代 ...