题意 题目链接 \(n\)次操作,每次你给出一个点的坐标,系统会返回该点的颜色(黑 / 白),程序最后输出一条直线把所有黑点和白点分隔开 Sol 一个很直观的想法:首先询问\((dx, 0)\),然后每次询问二分中点,根据与第一次询问得到的字符串的关系不断调整二分范围 但是这样会被卡,我修改了两个地方才过. 二分调整边界的时候直接设\(l = mid\)或\(r = mid\),因为我们最后得到的不是一个精确解,所以这样写是可以的 最后输出直线的时候加一个偏移量,也就是输出一条斜线 具体看代码…
第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extrasensory abilities: Exactly n dwarves entered completely dark cave. Each dwarf received a hat — white or black. While in cave, none of the dwarves was…
题目链接:1063C - Dwarves, Hats and Extrasensory Abilities/1064E - Dwarves, Hats and Extrasensory Abilities 题目大意:交互题,每次询问一个点,返回该点的颜色(黑或白),在询问\(n\)次后求出一条直线,使得该直线可以将相同颜色的点分到一边,如果不存在这样的直线则判定为Wrong Answer. 也就是说,询问的点要能保证,无论对方怎么回答,都能找到一条合法的直线满足条件. 题解:先引入两个概念:基准…
题目大意: 依次给定$n$个点的颜色,要求给定这$n$个点的坐标以及一条可以把他们分成两部分的直线 强制在线(交互) $n \leqslant 30$ 感觉自己真像一个乱搞... 我们只考虑把点放在最长的斜线$y = x$上 考虑$[0, 2^2]$,如果我们把第一个点放在$(0, 0)$上,那么后面根据返回的颜色是否与第一个点相同去二分,能放$3$个点 所以我们只需要$[0, 2^{29}]$就能放下30个点了 但是最后的白点和黑点的坐标差距只有$1$ 这个时候,我们选取$y = -x + b…
题意 交互题, 本来应该是在平面上进行的. 实际上换成一条直线就可以, 其实换成在平面上更复杂一些. Solution 假设\(l\)点是黑点, \(r\)处是白点, 那么就把下一个点的位置放置在\(l + r / 2\)处, 然后递归处理. Code #include <ctype.h> #include <stdio.h> #include <string> #include <iostream> #include <algorithm> u…
题目大意 交互题. 输出平面上的一个点的坐标,交互程序给这个点染色(白或黑). 如此重复 $n$ 次($ 1\le n \le 30$). 要求输出的 $n$ 个点各不相同,并且不论交互程序怎样给它们染色,都能找到一条直线将白点和黑点隔开(分隔线不能通过染色的点). 输出分隔线上的两个点的坐标. 要求:输出的所有坐标都必须是 $0$ 到 $10^9$ 之间的整数. 解法 不难想到可以将 $n$ 个点都选在一条平行于 $x$ 轴的直线上. 每次都取中间两个相邻的黑白点的连线的中点. (Put a…
https://codeforces.com/contest/1063/problem/C 首先可以想到一个简单做法:先钦定这个直线的斜率k=-1,然后设直线y=-x+b 设黑点放直线上方:如果已知(x,y)是黑点,那么y>-x+b,b<x+y 如果已知(x,y)是白点,那么b>x+y 可以二分b,对于每个b输出任意合法(x,y)满足x+y=b,然后根据结果更新b的范围 这样子初始时b可以为[1,2e9-1],可以发现log2(2e9)超过30了 然而试一下可以发现这样子会A不掉...发…
Find an element in hidden array There is an array of length N consisting of non-negative integers. The array is sorted in non-decreasing order. Each number in the array appears exactly K times, except one element, which appears at least once, but les…
点此看题面 大致题意: 有一个\(1\sim 2^n\)的排列,\(n\le7\),每次交互告诉你有几个位置上的数是正确的,让你在\(1000\)轮以内猜出每个位置上的数. 二分 显然,我们可以通过二分来求解此题. 具体地,我们先把所有位置填满\(1\),然后暴力枚,找到一个位置填上\(2\)使得此时没有一个位置上的数是正确的. 然后接下来,我们枚举\(3\sim2^n\)的每一个数,每次把\(l\sim mid\)这段区间内除不是\(1\)或\(2\)的位置外全填上当前数,然后询问当前对的数的…
https://codeforces.com/contest/1146/problem/C 题意 一颗大小为n的树,每次可以询问两个集合,返回两个集合中的点的最大距离,9次询问之内得出树的直径 题解 求树的直径:先找到一个点a,找到离他最远的一个点b,最后找到距离b最远的点c,b和c之间的距离就是树的直径 先询问离1最远的距离,然后二分找到这个点a,然后询问a的最远距离 代码 #include<bits/stdc++.h> #define fk fflush(stdout) using nam…