[agc006D]Median Pyramid Hard-[二分+乱搞]
Description
题目大意:给你一个长度为n*2-1的排列,将除了该序列头尾的两个数外的其他数(设为i)变为原序列i-1,i,i+1下标数的中位数。求最后的数是什么。例子如下:
        
Solution
这道题我们考虑二分(反正我YY了好久也没想出其他做法)。
我们设当前二分到k,要判断答案与k的大小关系。将原排列中<=k的数设为0,反之设为1。
如此我们可以得到一个01序列。
通过分析可得,假如01序列中有两个相邻的数相等,则它们正上方的所有数都与它们相等。(我们可以称之为柱子)
1
_ 1 1
_ _ 1 1 _
_ _ _ 1 1 _ _
则对于某个排列如果它最上方的数为0,有以下情况:
1,它的第n位是柱子。
2,以它的第n位为中心,左边或者右边只有为0的柱子
3,以它的第n位为中心,两边最近的柱子都为0
4,以它的第n位为中心,两边的柱子分别为0和1,但是0柱子离中心较近。
5,以它的第n位为中心,左右两边都没有柱子,则需要序列第1位为0。
以下为情况4的证明:
1| 1 1 1 1 1 0 0 0 0 0 |0
| 1 1 1 1 1 0 0 0 0 0 |0
1| 1 1 1 1 0 1 0 0 0 0 |0
1| 1 1 1 0 1 0 1 0 0 0 |0
1| 1 1 0 1 0 1 0 1 0 0 |0
1| 1 0 1 0 1 0 1 0 1 0 |0
1| 0 1 0 1 0 1 0 1 0 1 |0
该图左边是1柱子,右边是0柱子。依图可证明。
其他证明同理。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,a[],l,r,mid,ans;
bool _get(int x){ return !(x<=mid);}
bool check()
{
for (int i=;i<=n-;i++)
{
if (_get(a[n+i-])==_get(a[n+i])) return _get(a[n+i]);
if (_get(a[n-i+])==_get(a[n-i])) return _get(a[n-i+]);
}
return _get(a[]);
}
int main()
{
scanf("%d",&n);
for (int i=;i<=*n-;i++) scanf("%d",&a[i]);
l=;r=*n-;
while (l<=r)
{
mid=(l+r)/;
if (!check()) r=mid-,ans=mid;else l=mid+;
}
cout<<ans;
}
[agc006D]Median Pyramid Hard-[二分+乱搞]的更多相关文章
- [NOIP模拟赛][并没有用二分][乱搞AC]
		圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到达 ... 
- Codeforces 1077E (二分乱搞或者dp)
		题意:给你一个数组,可以从中选区若干种元素,但每种元素选区的个数前一种必须是后一种的2倍,选区的任意2种元素不能相同,问可以选取最多的元素个数是多少? 思路1(乱搞):记录一下每种元素的个数,然后暴力 ... 
- bzoj1992鬼谷子的钱袋(二分乱搞 二进制)
		1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3223 Solved: 2333 Descriptio ... 
- [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)
		传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可 ... 
- AT2165 Median Pyramid Hard 二分答案 脑洞题
		无论再来多少次也不可能想到的写法. 二分一个最小的顶端值\(k\),大于设为\(1\)小于等于设为\(0\),可以证猜出来(你跟我说这可以?)如果存在两个连在一起的0/1那么它们会一直往上跑,还可以很 ... 
- SCU 4437 Carries(二分乱搞)题解
		题意:问任意两对ai,aj相加的总进位数为多少.比如5,6,95分为(5,6)(5,95)(6,95),进位数 = 1 + 2 + 2 = 5 思路:显然暴力是会超时的.我们可以知道总进位数等于每一位 ... 
- AGC006D Median Pyramid Hard
		闲扯 今天模拟的题,应该是挺简单的二分和贪心,就是没想出来,我好弱啊 顺便ORZ聚聚BLUESKY007,踩爆我了 思路 今天发现中位数性质如此优秀 二分最后塔顶的数,大于等于它的数变为1,小于它的数 ... 
- [AGC006] D - Median Pyramid Hard 二分
		Description  现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N.  第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ... 
- 【bzoj5085】最大(二分+乱搞)
		题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5085 这道题我们可以先二分答案,然后转化为判定是否有四角权值>=mid的矩形. ... 
随机推荐
- Windows7下安装配置PostgreSQL10
			PostgreSQL安装: 一.windows7下安装过程首先上PostgreSQL官方网站的下载页面https://www.postgresql.org/download/windows/,下载本软 ... 
- Save and read double array in a binary file
			;} 32 bytes read 9.5 -3.4 1 2.1 " 
- python函数可变参数*args和**kwargs区别
			#*args(元组列表)和**kwargs(字典)的区别 def tuple_test(*args): for i in args: print 'hello'+i s=('xuexi','mili' ... 
- mail发邮件报错 "send-mail: fatal: parameter inet_interfaces: no local interface found for ::1"
			发送邮件: [root@itfswelog123]# echo '测试邮件标题' | mail -s "数据库挂啦.挂啦.起床啦 " xx@163.com 出现异常: [r ... 
- 404 Note Found队-Alpha2
			目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ... 
- Strategy(策略)模式
			1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Cod ... 
- Centos 7安装Grafana 4及结合Zabbix3.2实现可视化监控图形
			上一篇介绍了如何在Centos 7环境下安装zabbix监控,本章继续介绍在Centos 7环境下安装Grafana,并结合Zabbix实现可视化监控图形! 简介: Grafana 是 Graphit ... 
- java8 新特性 Stream流 分组 排序 过滤 多条件去重
			private static List<User> list = new ArrayList<User>(); public static void main(String[] ... 
- vim内替换文件内容
			几个常用的方法如下: :%s/foo/bar/g 把全部foo替换为bar,全局替换 :s/foo/bar/g 当前行替换foo为bar :%s/foo/bar/gc 替换每个foo为bar,但需要确 ... 
- css中的定位问题
			由于我最近在修改自己的网页布局,突然发现了自己对css中的定位概念还是混淆的,于是通过查官方文档,大神博客,自己实践,重新梳理了css定位的知识点.如果有不对的地方,请指正 
