zoukankan      html  css  js  c++  java
  • 交互题乱做

    感觉自己智商太低,来做交互题。

    36th Petrozavodsk Programming Camp Day 8 A

    有一个 (n imes n) 的正方形,左下角 ((0,0)),右上角 ((n,n))。正方形里(含边界)的某整点上有一只机器人。
    你可以每次给出一个严格在正方形外的点 ((x,y)),会返回 ((x,y)) 和机器人的直线距离的平方。每次询问后由机器人任选上下左右的一个方向移动 (1)
    确定机器人的初始位置。
    (n=100),询问点与正方形的切比雪夫距离不超过 (1000),询问次数不超过 (4)

    题解:
    其实问两次就够了。

    1. ((2n+1,n)),然后枚举正方形内所有点,标记出符合条件的;
    2. ((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))

  • 相关阅读:
    C++ primer plus读书笔记——第16章 string类和标准模板库
    C++ primer plus读书笔记——第15章 友元、异常和其他
    C++ primer plus读书笔记——第14章 C++中的代码重用
    C++ primer plus读书笔记——第13章 类继承
    C++ primer plus读书笔记——第12章 类和动态内存分配
    开发中常用的一些神器推荐
    收集常用的Linux常用命令
    【数据库】13种会导致索引失效语句写法
    Windows终端利器Cmder
    嵌入式操作系统的主要特点都有哪些
  • 原文地址:https://www.cnblogs.com/Camp-Nou/p/14424321.html
Copyright © 2011-2022 走看看