为什么Cf上所有的交互题都是$binary \; Search$。。。

把序列分成前后两个相等的部分,每一个都可以看成一条斜率为正负$1$的折线。我们把他们放在一起,显然,当折线的交点的横坐标为整数时有解。

我们考虑序列元素$a_{i}, a_{i + \frac{n}{2}}$,他们的差的奇偶性对于每一个$i$都是一样的,因为随着横坐标的增加,纵坐标之差要么不变,要么加减$2$。

显然如果我们询问$a_{1}, a_{1 + \frac{n}{2}}$的差是奇数,那就不可能存在解了。

我们把折线的左右边界设成重合,也就是第一条折线的右边界的点就是第二条折线左边界的点。不考虑边界处相交时,显然两条折线是交错的,于是必定有交点。

我们只要求出任意一组解就可以了,于是可以二分,可以快速判断左右区间中哪一个一定存在解,根据交错必定有解就可以了。

$\bigodot$技巧&套路:

  • 根据奇偶性可以证明将问题简化
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std; const int N = ; int n, a[N]; int Ask(int p) {
cout << "? " << p << endl;
cin >> a[p];
cout << "? " << p + n / << endl;
cin >> a[p + n / ];
if (a[p] == a[p + n / ]) {
cout << "! " << p << endl;
exit();
}
return a[p] < a[p + n / ];
} int main() {
scanf("%d", &n);
int type = Ask();
if ((a[] - a[ + n / ]) & ) {
cout << "! -1" << endl;
return ;
}
int nl = , nr = n / ;
for (int md; nl <= nr; ) {
md = (nl + nr) >> ;
if (Ask(md) == type) {
nl = md + ;
} else {
nr = md - ;
}
} return ;
}

【Cf #503 B】The hat(二分)的更多相关文章

  1. CF 8D Two Friends 【二分+三分】

    三个地点构成一个三角形. 判断一下两个人能否一起到shop然后回家,如果不能: 两个人一定在三角形内部某一点分开,假设沿着直线走,可以将问题简化. 三分从电影院出来时候的角度,在对应的直线上二分出一个 ...

  2. CF 8D Two Friends (三分+二分)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...

  3. CF 672D Robin Hood(二分答案)

    D. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  4. CF GukiZ hates Boxes 【二分+贪心】

    Professor GukiZ is concerned about making his way to school, because massive piles of boxes are bloc ...

  5. 【Cf #503 C】Sergey's problem(有趣的构造)

    感觉这种构造题好妙啊,可我就是想不到诶. 给出一张无自环的有向图,回答一个独立集,使得图中任意一点都可以被独立集中的某一点两步之内走到. 具体构造方案如下: 下标从小到大枚举点,如果该点没有任何标记, ...

  6. cf Two Sets (我用二分最大匹配做的)

    题意: n个数p1,p2....pn     两个数a,b 把它们分成A,B两个集合. 若x属于A,a-x一定属于A. 若x属于B,b-x一定属于B. 问是否可能将这n个数分成两个集合.若可以,输出每 ...

  7. Codeforces Round #503 (by SIS, Div. 2) D. The hat -交互题,二分

    cf1020D 题意: 交互题目,在有限的询问中找到一个x,使得数列中的第x位和第(x+n/2)位的值大小相同.数列保证相邻的两个差值为1或-1: 思路: 构造函数f(x) = a[x] - a[x ...

  8. CF 706B 简单二分,水

    1.CF 706B  Interesting drink 2.链接:http://codeforces.com/problemset/problem/706/B 3.总结:二分 题意:给出n个数,再给 ...

  9. CF 600B Queries about less or equal elements --- 二分查找

    CF 600B 题目大意:给定n,m,数组a(n个数),数组b(m个数),对每一个数组b中的元素,求数组a中小于等于数组该元素的个数. 解题思路:对数组a进行排序,然后对每一个元素b[i],在数组a中 ...

随机推荐

  1. oracle数据库数据字典应用

    oracle数据字典 数据字典是由oracle服务器创建和维护的一组只读的系统表.数据字典分为两类:一是基表,二是数据字典视图. 数据字典视图包括用户名.用户权限.对象名.约束和审计等信息,是通过运行 ...

  2. Redis勒索事件爆发,如何避免从删库到跑路?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 9月10日下午,又一起规模化利用Redis未授权访问漏洞攻击数据库的事件发生,此次 ...

  3. 【Docker】第一篇 Docker的初始化安装部署

    一.Docker基础 Dacker倡导的理念:一个容器一个进程 Docker的版本了解: Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人 ...

  4. 小刘的深度学习---Faster RCNN

    前言: 对于目标检测Faster RCNN有着广泛的应用,其性能更是远超传统的方法. 正文: R-CNN(第一个成功在目标检测上应用的深度学习的算法) 从名字上可以看出R-CNN是 Faster RC ...

  5. ossec兼容的操作系统

    OSSEC兼容以下操作系统和日志格式 操作系统 以下操作系统可安装OSSEC代理 l  GNU/Linux (all distributions, including RHEL, Ubuntu, Sl ...

  6. Vue 实例详解与生命周期

    Vue 实例详解与生命周期 Vue 的实例是 Vue 框架的入口,其实也就是前端的 ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进 ...

  7. git push remote: User permission denied

    这种错误因为本地保存了一个错误的账号密码,只需要重新编辑成正确的账号密码 直接上方法

  8. 实践lnmpde 的安装

    1.先安装apache, yum install httpd 2.安装MySQL rpm -qa | grep mysql       // 这个命令就会查看该操作系统上是否已经安装了mysql数据库 ...

  9. TeamWork#3,Week5,The First Meeting of Our Team

    sixsix第一次会议记录 [会议时间]2014年10月23日星期四19:00-20:00 [会议形式]小组讨论 [会议地点]5号公寓 [会议主持]高雅智 [会议记录]张志浩 会议整体流程 一.签到 ...

  10. TeamWork#2,Week 2,We are sixsix!

    We are sixsix! (从左至右依次是:郝倩.张志浩.高雅智[高哥].牛强.张明培育.彭林江.王卓) 郝倩,来自120617班,我们组7个成员中唯一一个6行政班以外的成员.为了达成组队条件,彭 ...