原题链接:B. The hat

题意:有n(偶数)个人围成一个圈,每个人身上有一个数字,保证相邻两个人的数字差为1,

现在要把第i个人和第i+n/2个人面对面站着,例如现在有8个人,站好后如下:

1 2 1 2

3 4 3 2

第1个人和第5个人面对面,第2个人和第6个人面对面,以此类推。。。

现在的问题是你可以询问q(q<=60)次,在n(2<=n<=100000)个人中

找出一对面对面站着且数字相同的人,输出这两个人任意一个人的位置,没找到输出-1;

首先当n%4!=0的时候我们直接输出-1即可,为什么可以这样?

我们可以先看一组数据:

1 2 3

2 1 2

第一个人为奇数,那么因为保证相邻两个人的数字差为1,所以第二个人肯定为偶数。。。第一排最后一个为奇数

下面一排的第一个人跟第一排的最后一个人数字差为1,所以他肯定为偶数,于是上面一排跟下面一排奇偶性刚好错开

所以上面的数不可能等于下面的数,证完了,是不是很简单?

OK,接下来我们考虑一般情况,一共最多有50000对数,我们只可以询问

最多60次,如果从前往后直接询问肯定不行,有经验的选手容易想到二分查找,

没错,这道题还真就是二分查找,怎么查找呢,我们先看一组数据:

7 6 5 4 5 6 5 4 3 2

1 2 3 4 3 2 3 4 5 6

设上面一排为A,第i个数为Ai,下面一排为B,第i个数为Bi

A1>B1,A只有往后减少,B往后增加中间才能出现相等的情况,并且由于最后An要和B1要相差1,Bn和A1也要相差1

所以肯定是有解的。先查第一对,A1=7,B1=1,得出上下排大小关系然后在第二对和最后一对中间进行二分查找,具体实现见代码:

#include <bits/stdc++.h>
using namespace std;
int n,x,y,a,b;
int main(){cin>>n;if(n%4!=0){printf("! -1\n");return 0;}printf("? 1\n");cin>>x;printf("? %d\n",1+n/2);cin>>y;if(x==y){printf("! %d\n",x);return 0;}int l=2,r=n/2;while(l<=r){int m=(l+r)/2;printf("? %d\n",m);cin>>a;printf("? %d\n",m+n/2);cin>>b;if(a==b){printf("! %d\n",m);return 0;}else if(x>y&&a>b||x<y&&a<b)l=m+1;else r=m;}
}

转载于:https://www.cnblogs.com/ccsu-kid/p/9476920.html

Codeforces Round #503 (by SIS, Div. 1)D. the hat相关推荐

  1. Codeforces Round #503 (by SIS, Div. 2) D. The hat(交互题)

    题目链接:http://codeforces.com/contest/1020/problem/D 题意描述: 这是一个交互题,互交题就是你要输出一些问题,评测机就会回答你一些问题 你要在规定的提问次 ...

  2. Codeforces Round #503 (by SIS, Div. 2) C. Elections

    气死我了人生中第一次打cf就掉分了 A题大水题浪费太多时间囧明明都是A两题亮老师还上分了.. 表示C题打的时候就想到正解啊(而且还更加优秀,因为家里老爷机暴力跑的超龟以为不行 其实是没认真算复杂度), ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  7. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  8. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  9. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

最新文章

  1. SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据
  2. “冷潮”之后,P2P或更加适合投资
  3. android 自定义view如何控制view的高度_Android自定义View属性动画
  4. springboot进行图片上传并访问资源
  5. VTK:绘图之BarChart
  6. andorid 第五天 了解xml与应用程序之间的关系
  7. mysql mariadb并存_MariaDB与MySQL并存
  8. USB共享网络:android手机通过USB与Ubuntu进行socket网络通信
  9. React之初始化state
  10. python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校
  11. 理解CapsuleNetwork2
  12. python判断网页密码加密方式_Python模拟网页中javascript加密与验证的相关处理
  13. SpringCloud微服务权限控制(一)概述
  14. IndexedDB封装
  15. stc15w404as引脚图_STC15W408AS系列
  16. 龙世界java下载_龙世界3-龙王之剑
  17. spider分布式引擎
  18. 增量式编码器 绝对值编码器
  19. 【STM32F407的DSP教程】第22章 DSP矩阵运算-放缩,乘法和转置矩阵
  20. Apple Mac OS 0.97太酷了。。。呵呵,顺便分享某版本Mac源码

热门文章

  1. UML几个关系图表示
  2. 实战tcpdump看RST
  3. time,atoi,strstr
  4. 数据结构: 线索化二叉树
  5. 系统自动化安装kickstart
  6. 专访William Kennedy:如何学习Go语言
  7. lamp wordpress
  8. sitemesh的使用
  9. python urllib的用法实例
  10. 一张图看懂数据防泄漏