#构造,二分#[AGC006B] [AGC006D] Median Pyramid
分析(Easy)
若\(X=1\)或\(X=2n-1\)无解,否则在正中间构造\(X-1,X,X+1\),
其余位置升序铺入剩余数,
若\(X-1\)左侧数大于\(X-1\)那么\(X-1\)和\(X\)上方必定为\(X\),
\(X+1\)上方为\(X+1\),可以发现比原来更接近\(X\),显然到塔尖答案即为\(X\)
\(X+1\)右侧数小于\(X+1\)的情况同理
代码
#include <cstdio>
#define rr register
using namespace std;
int n,x,t;
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
signed main(){
scanf("%d%d",&n,&x);
if (x==1||x==2*n-1) return !puts("No");
puts("Yes"),t=1;
for (rr int i=1;i<n-1;++i){
while (x-1<=t&&t<=x+1) ++t;
print(t++),putchar(10);
}
print(x-1),putchar(10),
print(x),putchar(10),
print(x+1),putchar(10);
for (rr int i=1;i<n-1;++i){
while (x-1<=t&&t<=x+1) ++t;
print(t++),putchar(10);
}
return 0;
}
分析(Hard)
考虑二分答案,令\(b[i]=a[i]\leq ans\)
按照Easy越接近中间越有可能成为答案
所以越靠中间只要存在两个1,这个答案就可以被传上去,
否则如果存在两个0显然不行,否则如果都判断不了就用\(b[1]\)判断
代码(Hard)
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
int n,a[200011];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline bool check(int k){
for (rr int i=0;i<n-1;++i){
if ((a[n-i-1]>k&&a[n-i]>k)||(a[n+i]>k&&a[n+i+1]>k)) return 0;
if ((a[n-i-1]<=k&&a[n-i]<=k)||(a[n+i]<=k&&a[n+i+1]<=k)) return 1;
}
return a[1]<=k;
}
signed main(){
n=iut();
for (rr int i=1;i<=n*2-1;++i) a[i]=iut();
rr int l=2,r=2*(n-1);
while (l<r){
rr int mid=(l+r)>>1;
if (check(mid)) r=mid;
else l=mid+1;
}
return !printf("%d",l);
}
#构造,二分#[AGC006B] [AGC006D] Median Pyramid的更多相关文章
- 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)
题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...
- AGC006D Median Pyramid Hard
闲扯 今天模拟的题,应该是挺简单的二分和贪心,就是没想出来,我好弱啊 顺便ORZ聚聚BLUESKY007,踩爆我了 思路 今天发现中位数性质如此优秀 二分最后塔顶的数,大于等于它的数变为1,小于它的数 ...
- [agc006D]Median Pyramid Hard-[二分+乱搞]
Description 题目大意:给你一个长度为n*2-1的排列,将除了该序列头尾的两个数外的其他数(设为i)变为原序列i-1,i,i+1下标数的中位数.求最后的数是什么.例子如下: Solution ...
- B - Median Pyramid Easy 构造题
B - Median Pyramid Easy Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statemen ...
- AT2165 Median Pyramid Hard 二分答案 脑洞题
无论再来多少次也不可能想到的写法. 二分一个最小的顶端值\(k\),大于设为\(1\)小于等于设为\(0\),可以证猜出来(你跟我说这可以?)如果存在两个连在一起的0/1那么它们会一直往上跑,还可以很 ...
- [AGC006] D - Median Pyramid Hard 二分
Description 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N. 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ...
- $AT2163\ Median\ Pyramid\ Easy$ 构造
正解:构造 解题报告: 传送门$QwQ$ 考虑如果有两个相邻格子是相同数字那么它们以上这两列就都会是这列数字(显然$QwQ$? 所以考虑只要构造出第$n-1$行的中心和中心右侧($or$左侧一样的$Q ...
- Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)
Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...
- AT2163 [AGC006B] Median Pyramid Easy
需要一点灵感的题目. 可以发现这样一个事情,当三个数中有两个数相同时,中为数一定是这两个相同的数. 基于这个观察,我们想让每一行都存在这样两个相同的两个数,就一定能保证第一层的值为 \(x\) 了. ...
- AT2165 Median Pyramid Hard
题目链接:戳我 一看范围1e5,往二分上想. 可是再怎么也没有想到这个神仙的二分答案qwq 我们二分一个数x,设比他大的数为1,小于等于他的数为0.那么我们就可以把原来的那个转化成一个01塔. 然后我 ...
随机推荐
- 启动HDFS伪分布式环境时报权限错误
问题描述 操作系统:Ubuntu18.04 LTS HDFS版本:hadoop-3.2.3 普通用户登录,参照官方文档在单机上安装伪分布式环境时,启动HDFS报权限错误. 具体报错信息如下: $ ./ ...
- vue实现导出word文档(含多张图片)
vue实现导出word文档(含多张图片) 转自: https://www.pudn.com/news/62e1e14e55398e076bea2d2f.html
- 正则函数及面向对象开发初识---day19
1.正则函数 # ### 正则函数 import re #search 通过正则匹配出第一个对象返回,通过group取出对象中的值 strvar = "1+2 3*4" obj = ...
- html基础和js基础
HTML基础 html文件结构 <!DOCTYPE html> 文档类型声明 <html lang="en"></html> 是html标签,称 ...
- STL-unordered_hashtable模拟实现
#pragma once #include<vector> #include<string> #include<iostream> using std::cout; ...
- String对象和String常量池
1. String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "mogublog" ; // 字面量的定义方式 Str ...
- Learning by teaching --- 费曼学习法
世界上存在成千上万种学习法,如果上天只让我掌握一种,那一定就是"费曼学习法". 介绍 费曼学习法是由诺贝尔物理学奖获得者理查德·费曼提出的一种学习方法,其核心思想是将所学内容用自己 ...
- tmux使用--同步多终端输入
最近一直需要同时操作多个远程机器,就简单学习了下tmux的使用.tmux(terminal multiplexer)是终端复用神器.对多个窗格同时使用特别好用,同步操作多台机器特别方便. tmux安装 ...
- 软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式
软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式 好久不用这个都有些生疏了,还特意做了好几个尺寸的图,结果白弄了,软件会自动生成. 1.准备256-256px的图 2 ...
- MySQl出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'解决方法
描述 使用到是阿里云服务器,系统为cent Os,给某个账户授权之后,root的账户就登录不进去了,原本root账户设置好了远程连接的权限了,网上搜索了一大堆,终于自己摸索得到了几个方法 产生原因 r ...