感觉自己智商太低,来做交互题。
36th Petrozavodsk Programming Camp Day 8 A
有一个 (n imes n) 的正方形,左下角 ((0,0)),右上角 ((n,n))。正方形里(含边界)的某整点上有一只机器人。
你可以每次给出一个严格在正方形外的点 ((x,y)),会返回 ((x,y)) 和机器人的直线距离的平方。每次询问后由机器人任选上下左右的一个方向移动 (1)。
确定机器人的初始位置。
(n=100),询问点与正方形的切比雪夫距离不超过 (1000),询问次数不超过 (4)
题解:
其实问两次就够了。
- 问 ((2n+1,n)),然后枚举正方形内所有点,标记出符合条件的;
- 问 ((n+1,-1)),然后枚举正方形内所有点,找出符合这次的条件且四周有标记的。
容易证明这样可以找出唯一点。
2021-03-18 省选模拟赛 B
通信题,Alice 将对 Bob 进行若干次询问。
每次 Alice 想好两个不超过 (n) 且互不相同的正整数 (x,y),从 (x,y) 中选一个数 (z) ((z=x) 或 (z=y)) 给 Bob,并告诉 Bob 一个正整数 (k)。
每次 Bob 得到 (z) 和 (k) 后,要确定 (z=x) 还是 (z=y)。
帮助 Alice 决定每次的正整数 (k),帮助 Bob 根据询问的 (k) 和 (z) 确定 (z=x) 还是 (z=y)。
(n=920),要求 (1le kle 12)
题解:
考虑 Bob 是拿到 (z),并且根据获得的 (k) 给出 (0) 或 (1),即构造函数 (f(z,k)=0/1)。
注意到所有的数是等价的,所以猜想对于一个 (z),使 (f(z,k)=0) 和 (f(z,k)=1) 的 (k) 的个数可能要一样多。
由于对于任意数对 ((x,y)),都要存在一个 (k) ,使得 (f(x,k)
e f(y,k)),不然无法分辨这对 (x) 和 (y)。
于是我们想到这样一个做法:
对每个 (z),构造一个 (12) 位 01 串,其中 (6) 位是 0,(6) 位是 1,且不同的 (z) 对应不同的 01 串。
注意到这样的 01 串有 (inom{12}6=924) 个,可以通过。
LOJ 2841
已知桌面上有 (n) 本书从左往右排成一排,编号为 (1 sim n)。
图书管理员每次可以取走连续的若干本书。你每次可以向交互库询问一个编号集合 (S) ,交互库会返回图书管理员最少多少次把所有编号在 (S) 中的书取走。
要求通过询问得出这 (n) 本书编号的顺序,由于左右顺序无法通过询问得出,只要得到从左往右或从右往左依次的编号即可。
(n le 1000),询问次数限制 (20000) 次
我们设相邻的书有连边。
对于 (u
otin S),通过询问 (S) 和 (Scup{u}) 可以得到 (u) 有多少条边连到 (S) 内。
可以先通过 (n) 次询问问出链的一端的编号,然后考虑每次怎么问出下一个点。
二分。假设我们已经知道下一个点在 ([l,r]) 中,(lfloorfrac{l+r}2
floor=m),那么我们可以用上面的方法两次问出,(u) 除了已经确定的边以外,有多少条边连到 ([l,m]) 里。因此二分可行。
问出每个点的下一个点就问出了一个顺序,询问次数 (O(nlog n))。
但是这样的话询问次数应该会超一点,考虑有些区间被询问了多次,把它记忆化下来就好了。
(n=1) 要判一下。
2021-05-07 NOI 模拟赛 C
(d) 维平面有一个点,这个点的每维坐标都是 ([0,r]) 内的整数。你要通过询问找出这个点。
你每次可以询问一个点,要求询问点的每维坐标也都是 ([0,r]) 内的整数。返回一个 bool 值表示 询问点到所求点的切比雪夫距离是否小于上一次的距离。
(dle 500,rle 10^9),询问次数不超过 (50000)
假设答案每维坐标都大于 (0),那么令初始点为 (R=(1,1,cdots,1)),然后逐步往大调整得到答案。
注意到切比雪夫距离为每一维坐标差绝对值的最大值,如果我们知道哪几维取到了这个最大值,那么这几维就是影响答案的。我们尝试把这几维坐标增大一些(也就是使这几维坐标差绝对值减小),看看增大多少后会出现新的最大值维度。
重复 (O(d)) 次后所有维度坐标差绝对值就相等了,可以轻松得到答案。
怎么找出哪几维取到了最大值?整体二分。
而对于答案某维坐标恰为 (0) 的情况。最后调整即可。
询问次数 (O(dlog d+dlog r))。