Codeforces #1063C Dwarves, Hats and Extrasensory Abilities
题目大意
交互题。
输出平面上的一个点的坐标,交互程序给这个点染色(白或黑)。
如此重复 $n$ 次($ 1\le n \le 30$)。
要求输出的 $n$ 个点各不相同,并且不论交互程序怎样给它们染色,都能找到一条直线将白点和黑点隔开(分隔线不能通过染色的点)。
输出分隔线上的两个点的坐标。
要求:输出的所有坐标都必须是 $0$ 到 $10^9$ 之间的整数。
解法
不难想到可以将 $n$ 个点都选在一条平行于 $x$ 轴的直线上。
每次都取中间两个相邻的黑白点的连线的中点。
(Put a new point in the middle of the gap between white points and black points. Depending on the color said by jury shrink the gap to the left or to the right. In the end, draw a diagonal line between white points and black points.)
由于纵坐标是一个常数,下面我们只考虑横坐标。
将第一个点的(横)坐标选为 $0$,不妨设第一个点被赋予白色,此时我们假想 $10^9+1$ 处是一个(虚拟的)黑点。
每次选取相临的两个黑白点连线的中点 $ l + (r - l) / 2$ 或者 $(l+r)/2$(注意:这种写法有溢出的风险)。
比赛时我的思路大体是对的,只是在最后输出分隔线时,我选择的是垂直于 $x$ 轴的直线,令其与 $x$ 轴交于 $(l + 1, 0)$,$l$ 是最右侧的白点的横坐标。
但是我没考虑到一种情况,那就是中间相邻的那两个黑白点的距离有可能是 $1$(这是由于 $2^{30} > 10^9+1$ 。实际上,若令 $x = 10^9 + 1$,将 $x\gets \lceil x /2 \rceil$ 反复执行 $29$ 次,必然有 $x = 1$;将 $x \gets \lfloor x/2 \rfloor$ 反复执行 $29$ 次也必然有 $x = 1$),此时分隔线恰经过最左侧的黑点。容易看出,分隔线若与 $x$ 轴垂直就在黑白点所在的水平线上占了一个位置(总共有 $10^9 + 1$ 个位置)。我们完全可以选择一条斜直线作为分隔线,由于最后必然有 $l < r$,我们可以令黑白点的纵坐标为 $1$,这样分隔线就可取为通过 $(l, 0)$ 和 $(r, 2)$ 两点的直线。
Codeforces #1063C Dwarves, Hats and Extrasensory Abilities的更多相关文章
- CodeForces 1063C. Dwarves, Hats and Extrasensory Abilities 交互
题目大意: 依次给定$n$个点的颜色,要求给定这$n$个点的坐标以及一条可以把他们分成两部分的直线 强制在线(交互) $n \leqslant 30$ 感觉自己真像一个乱搞... 我们只考虑把点放在最 ...
- [Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]
题目链接:1063C - Dwarves, Hats and Extrasensory Abilities/1064E - Dwarves, Hats and Extrasensory Abiliti ...
- 【交互 细节题 思维题】cf1064E. Dwarves, Hats and Extrasensory Abilities
第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extr ...
- Dwarves, Hats and Extrasensory Abilities Codeforces - 1063C
https://codeforces.com/contest/1063/problem/C 首先可以想到一个简单做法:先钦定这个直线的斜率k=-1,然后设直线y=-x+b 设黑点放直线上方:如果已知( ...
- CF1064 E - Dwarves, Hats and Extrasensory Abilities
题意 交互题, 本来应该是在平面上进行的. 实际上换成一条直线就可以, 其实换成在平面上更复杂一些. Solution 假设\(l\)点是黑点, \(r\)处是白点, 那么就把下一个点的位置放置在\( ...
- cf1064E. Dwarves, Hats and Extrasensory Abilities(二分 交互)
题意 题目链接 \(n\)次操作,每次你给出一个点的坐标,系统会返回该点的颜色(黑 / 白),程序最后输出一条直线把所有黑点和白点分隔开 Sol 一个很直观的想法:首先询问\((dx, 0)\),然后 ...
- Codeforces Round #516 (Div. 2) (A~E)
目录 Codeforces 1064 A.Make a triangle! B.Equations of Mathematical Magic C.Oh Those Palindromes D.Lab ...
- Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)
题目链接 A. Make a triangle! 题意 让某段最少增加多少使得构成三角形 思路 让较小两段往最长段去凑 代码 #include <bits/stdc++.h> #defin ...
- Codeforces Round #516(Div 2)
比赛链接:传送门 A. Make a triangle!(简单思维) 题目大意: 给你三条边,问你最多加多少长度能使这三条边能构成三角形. 思路: 最大边小于答案加另外两条边的和. #include ...
随机推荐
- 操作DOM -------JavaScrip
本文摘要:http://www.liaoxuefeng.com/ 经常用到. 由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM. 始终记 ...
- C# WinForm 绘制圆角窗体
public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; FormPath = new Syste ...
- SQL Server数据库日志清除
第一步 将数据库转换成 simple 模式 USE master GO ALTER DATABASE 所要删除日志的数据库名 SET RECOVERY SIMPLE WITH NO_WAIT GO 第 ...
- Linux Shell 几个特殊符号命令 & 、&& 、 ||
& 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动 ...
- 2018.11.5 Nescafe26 T1 小猫爬山
题目 题目描述 Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Fre ...
- 基于flash-marker.js 的地图标注闪烁代码调试
修改网上流传的flash-marker.js (function (global, factory) { typeof exports === 'object' && typeof m ...
- eclipse中使用git上传项目
eclipse中使用git上传项目 先需要上传到本地仓库 先找到此选项打钩 再如下 再添加的属性则可以自动填充邮箱和密码 之后 右键选择import 点击找到git 选中 下一步 如果没有找到git ...
- <Docker学习>1. 简介
Q: Dokcer是什么? A: 是一种虚拟化技术.参考https://www.imooc.com/learn/867快速了解Docker. Q: 传统虚拟机技术和Dokcer的区别? A: 传统虚拟 ...
- 科学计算库Numpy——数组形状
改变数组维数 给数组的shape属性赋值,改变数组的维数.数组的大小是不能改变的. 增加维度 使用np.newaxis增加维度. 删除维度 使用squeeze()删除维度是1的维度,也就是删除shap ...
- python3:判断手机的亮屏状态
在用python对手机做一些自动化操作时,常常会判断手机的亮屏状态,知晓手机的亮屏状态后才好做进一步的动作,如给屏幕解锁等. 用于了解手机的亮屏情况,有一个adb命令可用: adb shell du ...