[Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]
题目链接:1063C - Dwarves, Hats and Extrasensory Abilities/1064E - Dwarves, Hats and Extrasensory Abilities
题目大意:交互题,每次询问一个点,返回该点的颜色(黑或白),在询问\(n\)次后求出一条直线,使得该直线可以将相同颜色的点分到一边,如果不存在这样的直线则判定为Wrong Answer。
也就是说,询问的点要能保证,无论对方怎么回答,都能找到一条合法的直线满足条件。
题解:先引入两个概念:基准色 和 基准线。
基准色,即询问的第一个点的颜色
基准线,代表着下一次要询问基准线上的点,且基准线可以作为当前状态下的答案(在基准线左边的点的颜色与基准色相同,右边的颜色都与基准色不同)。基准线的一端为原点\((0,0)\)。
每次询问时,若询问结果与基准色相同,则把基准线的另一端向右移动一段距离,否则向左移动。但是为了保证基准线的合法性,还需要确定这一段距离要取多长。
由于\(n\)不超过30,考虑在\(2\)的次幂上做文章。假设当前还剩\(k\)个点未询问,则将\(2^k\)作为移动的距离。这样子就能保证无论怎么移动,基准线的移动都不会越过已经被询问过的点了。但是此时出现了一个问题,即最坏情况下,基准线的移动会不会超出题目的限制。可以发现,当所有点的颜色都与基准色相同时,移动的总距离为\(\sum_{i=0}^{n-1}2^i=2^n-1\),当\(n\)为\(30\)时,有\(2^n-1=1073741823>10^9\),超过了坐标的限制。因此当其超出范围时,需要将超出部分放在边界的右边。例如,当要询问的点为\((10^9+7,10^9)\)时,用\((10^9,10^9-7)\)来代替即可。
#include<bits/stdc++.h>
using namespace std;
int n,x,y,c,o=;
char s[];
int ask(int x)
{
if(x>o)printf("%d %d\n",o,*o-x);
else printf("%d %d\n",x,o);
fflush(stdout);
scanf("%s",s);
return s[]=='b';
}
int main()
{
scanf("%d",&n);
c=ask();
if(n==)return printf("0 0 %d %d\n",o,o),;
n--;
int cur=<<n;
while(n)
{
int tmp=ask(cur);n--;
if(tmp==c)cur+=<<n;
else cur-=<<n;
}
printf("0 0 ");
if(cur>o)printf("%d %d\n",o,*o-cur);
else printf("%d %d\n",cur,o);
return ;
}
[Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]的更多相关文章
- 【交互 细节题 思维题】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 设黑点放直线上方:如果已知( ...
- CodeForces 1063C. Dwarves, Hats and Extrasensory Abilities 交互
题目大意: 依次给定$n$个点的颜色,要求给定这$n$个点的坐标以及一条可以把他们分成两部分的直线 强制在线(交互) $n \leqslant 30$ 感觉自己真像一个乱搞... 我们只考虑把点放在最 ...
- Codeforces #1063C Dwarves, Hats and Extrasensory Abilities
题目大意 交互题. 输出平面上的一个点的坐标,交互程序给这个点染色(白或黑). 如此重复 $n$ 次($ 1\le n \le 30$). 要求输出的 $n$ 个点各不相同,并且不论交互程序怎样给它们 ...
- [Codeforces Round #516][Codeforces 1063B/1064D. Labyrinth]
题目链接:1063B - Labyrinth/1064D - Labyrinth 题目大意:给定一个\(n\times m\)的图,有若干个点不能走,上下走无限制,向左和向右走的次数分别被限制为\(x ...
- 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 ...
随机推荐
- AXI4 STREAM DATA FIFO
参考:http://www.xilinx.com/support/documentation/ip_documentation/axis_infrastructure_ip_suite/v1_1/pg ...
- .bat以管理员身份运行
原文地址:https://blog.csdn.net/stranger_hello/article/details/82257947 @echo off :获取管理员权限 %1 mshta vbscr ...
- gitlab 权限说明
五.权限说明 Guest(匿名用户) - 创建项目.写留言薄 Reporter(报告人)- 创建项目.写留言薄.拉项目.下载项目.创建代码片 段 Developer(开发者)- 创建项目.写留言薄.拉 ...
- css 生成图片添加的十字
<span class="add" title="继续上传"></span> .add { display: inline-block; ...
- SQL baseline_11g
conn sh/sh--执行想要创建基线的语句,语句的执行计划将会被缓存set autotrace on select /*ghbaselines1*/ count(*) from customers ...
- PCB载流你必须知道的那些事儿
也许大家都知道铜箔走线宽度与电流大小有关,往往都是硬件工程师让你走多少就走多少,但作为Layout工程师你还是要知道你的铜皮走线取值都由什么因素决定?取值多大才能让你安心? PCB的载流能力取决与以下 ...
- JDBC 连接
转载至:https://www.liyongzhen.com/ 在这一小节,我们将学习DriverManager对象和connection对象. DriverManager对象用于从驱动里获取一个co ...
- 关于haproxy
高性能负载均衡软件 haproxy 一.四层和七层负载均衡的区别: 所谓的四层就是OSI参考模型中的第四层,四层负载均衡也称为四层交换机,他主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加 ...
- VB 字符串转换为UTF-8
dim e as object Set e=CreateObject("MSScriptControl.ScriptControl") e.Language = "jav ...
- LOJ#6374 网格
题解: 挺好的一道题 两次容斥+一次二项式反演 首先考虑部分分不存在k的限制 然后我们发现两维之间是互相独立的 下面以x轴为例 然后问题就变成了 $$\sum\limits_{i=1}^{R} {xi ...