首页 > 其他分享 >【题解】CodeForces 686E Optimal Point

【题解】CodeForces 686E Optimal Point

时间:2023-12-06 22:45:57浏览次数:38  
标签:xi zi Point 题解 zc xc 区间 Optimal dis

传送门:https://codeforces.com/contest/686/problem/E

前言:本题解来源于作者某天晚上和一位朋友的发电内容(没错,这个作者直接把自己和朋友发电时发的话用markdown排了一下,传上来了),当时本来就比较口语化,加上作者的做法又实在太过离谱,因此可能语言表述不够清晰,对此深感抱歉qwq;
离谱做法。
首先,如果问题不是三维而是二维的,显然好做一点,使用曼哈顿距离转切比雪夫距离,然后我们的目标就是要将所有点框在一个边长 $2dis$ 的正方形里,令 $dis$ 尽可能小,那 $dis$ 就是 $max(x的范围,y的范围)/2$ 上取整,这是简单的;
考虑三维怎么做。还是考虑曼哈顿转切比雪夫,但只对 $x$ 和 $y$ 做,$z$ 先不管;
(注:以下我说的 $x$ 和 $y$ 就全是转到切比雪夫距离之后的坐标;)
设最终答案坐标为 $(xc,yc,zc)$,对于一个有玫瑰的点 $(xi,yi,zi)$,不妨设 $zi<=zc$,则 $(xc,yc,zc)$ 和 $(xi,yi,zi)$ 的距离为 $|zc-zi|+max(|xc-xi,yc-yi|)$;
此时考虑二分答案 $dis$,考虑怎么 $check$;先不考虑 $zc$ 的值域过大的问题,假设它可以枚举;那么我们可以枚举 $zc$,则要求对于所有 $i$,$|zc-zi|+max(|xc-xi,yc-yi|)<=dis$,分成两个式子就是$|zc-zi|+|xc-xi|<=dis$、$|zc-zi|+|yc-yi|<=dis$;
先说 $x$( $y$ 可以同理):若 $zi<=zc$,则把绝对值去掉之后是 $zc-zi+|xc-xi|<=dis$,$|xc-xi|<=dis-zc+zi$,也就是 $xc$ 需要在区间 $[xi-dis+zc-zi,xi+dis-zc+zi]$ 中;反之若 $zi>zc$,则 $zi-zc+|xc-xi|<=dis,|xc-xi|<=dis-zi+zc$,$xc$ 在区间 $[xi-dis-zc+zi,xi+dis+zc-zi]$ 中;在这两个式子里,$dis$ 和$zc$ 是和当前的 $i$ 无关的,可以单独拎出来,而把这两个值去掉之后的合法区间的交可以预处理,最后给左右端点加/减这两个值就可以了;
于是,假如我们可以枚举 $zc$ 就可以得到做法:把点按照 $z$ 值排序,然后二分 $dis$,$check$ 时枚举 $zc$,弄点线段树或者 $BIT$ 之类支持查询前/后缀的 $max或min(xi-zi或xi+zi)$,就可以支持 $O(log$ $n)$ 查询 $xc$ 的合法区间($yc$ 同理),看看有没有符合条件的点即可 $check$;
但,问题来了。我们枚举不了 $zc$。
但是,我们开心地发现,$zc$ 和所有点的 $zi$ 的相对位置是可以枚举的(因为一共最多就 $n+1$种),而在同一个相对位置段内的 $zc$,求出的$xc、yc$ 合法区间的不同只来源于最后加减的 $zc$,前面预处理的没有 $dis、zc$ 的合法区间、加上 $dis$ 影响之后的合法区间都是一样的;
我们考虑加减 $zc$ 这一步在干什么事;仍然拿 $x$ 举例,刚才的 $xc$ 合法区间是 $[xi-dis+zc-zi,xi+dis-zc+zi]$ $(zi<=zc)$、$[xi-dis-zc+zi,xi+dis+zc-zi]$ $(zi>=zc)$,去掉 $zc$ 之后是 $[xi-dis-zi,xi+dis+zi]$ $(zi<=zc)$、$[xi-dis+zi,xi+dis-zi]$ $(zi>=zc)$;加减 $zc$ 的时候,我们要把第一个区间左端点加 $zc$、右端点减 $zc$(相当于左右各往里缩 $zc$ ),第二个区间右端点加 $zc$、左端点减 $zc$(左右各往外放 $zc$);
容易发现,如果这两个区间进行这一步之前就没有交(也就是没有 $xc$ 可以符合要求),那么进行完这一步还是没交,这种直接扔掉;反之,如果进行这步之前有交,那么进行完仍然有交,除非你在缩放过程中把缩的那个区间给缩没了(左端点大于右端点);所以其实有了四个原区间( $x$ 两个 $y$ 两个)后,我们可以算出符合要求的 $zc$ 区间(需要又在当前枚举的 $z$ 轴相对位置,又不会把两个区间中任何一个缩没),然后这个区间不为空,就完了吗……?
咳,答案是没完。
因为你现在求出的 $xc$ 和 $yc$ 是转完切比雪夫距离的,也就是说是原来的 $(xc+yc,xc-yc)$,容易发现,如果你现在的 $xc$ 和 $yc$ 奇偶性不同,对应的原来的 $xc、yc$ 就不是整点,不符合题目要求,所以对于我们求出的合法 $zc$ 区间,我们可以从左端点开始往右逐个检查;容易发现在我们移动 $zc$ 的时候,原来的两组区间交($x$ 一组 $y$ 一组)只会呈现先变大再变小/从头到尾压根不变两种状态,而且只要有一个大小 $>=2$ 就必定有解了,所以其实你移动一个,有解就是有解,没解就是没解;
遂得到一个 $O(n$ $logA$ $logn)$  且常数大到发指的做法。预处理不要用线段树,用 $BIT$,即可 $1s$ 过。
细节:缩放区间那段,很可能你缩放前的区间就是一个被缩没了的状态,这种时候不要直接扔掉;有没有合法解,和原区间是不是被缩没了无关,只和 $zc$ 的合法区间为不为空有关,写的时候就直接算出 $zc$ 合法区间,合法区间为空再扔掉,不为空就继续做就好。

标签:xi,zi,Point,题解,zc,xc,区间,Optimal,dis
From: https://www.cnblogs.com/hellstairs/p/17880701.html

相关文章

  • 【题解】LibreOJ #3051「十二省联考 2019」皮配
    传送门:https://loj.ac/p/3051  首先,对于这样“少部分个体有特殊要求”的题目,我们先考虑,如果没有任何个体有特殊要求怎么做,然后再考虑怎么加上特殊要求;对于这道题,如果$k=0$,即没有学校有不喜欢的导师,那么,设总人数为$al$,城市$i$的人数和为$cit_i$、选择的阵营为$zy_i=0/......
  • UVA753 A Plug for UNIX 题解
    LinkUVA753APlugforUNIXQuestion有\(n\)个插座,\(m\)个设备和\(k\)种转换器,每种转换器有无限多个。转换器可以插着转换器用,每个插座或插头的类型可能不同,求最少剩多少个不匹配的设备Sulotion先考虑转换器连用的情况,用边表\(G[x][y]\)表示\(x\)类型可以转换成\(y......
  • UVA1395 Slim Span 题解
    LinkUVA1395SlimSpanQuestion求所有生成树中最大边权与最小边权差最小的,输出他们的差值Solution因为\(n\le100\)非常小,先把边从小到大排序,那么生成树的边肯定是排序后上的边连续的一块所以,可以枚举连续一块的起点\(L\),\(R\)从\(L\)往后推,判断全图连通性,如果已经完......
  • CF1809D Binary String Sorting 题解
    题意:思路:贪心:单调不降的$01$字符串,一定是一串连续的$0$再加上一串连续的$1$。由于每次操作的代价很大,所以需要在操作次数尽可能少的情况下,尽可能多地使用交换操作。由于$1$次交换操作,只能减少$1$个逆序对,当存在多个逆序对时,优先通过删除操作减少逆序对的......
  • ucup hefei 题解
    比赛链接B很有意思的题首先题目的要求为可以拆分成\(2\)个不相交的不降子序列根据\(dilworth\)定理,最小链覆盖\(=\)最长反链,所以要求最长反链\(\le2\)即原序列的逆序列的最长不降子序列长度\(\le2\)不难得到一个\(dp\)做法为:令\(f_{i,j}\)为到数\(i\),最长上......
  • python HTML文件标题解析问题的挑战
    引言在网络爬虫中,HTML文件标题解析扮演着至关重要的角色。正确地解析HTML文件标题可以帮助爬虫准确地获取所需信息,但是在实际操作中,我们常常会面临一些挑战和问题。本文将探讨在Scrapy中解析HTML文件标题时可能遇到的问题,并提供解决方案。问题背景在解析HTML文件标题的过程中,......
  • Error: error:0308010C:digital envelope routines::unsupported 【问题解决】【转载
    原文链接:  https://www.cnblogs.com/jaxu/p/17171211.html今天早上打开电脑,更新了日常工作的github仓库,然后就是习惯性地执行了"npminstall",发现报了下面这个错误:Error:error:0308010C:digitalenveloperoutines::unsupported顺便看了一下错误堆栈,发现是一个Node......
  • 线性代数题解
    前言写完了这道题我好想刚明白一点最小割???UU好闪,拜谢UU。题解首先,我们可以发现若第\(i\)行的\(B\)没选,那么第\(i\)列的\(B\)也不选,所以此时对于行和列是等价的。若\(A_i\)是\(0\),则会减少贡献\(\sum_{j}B_{i,j}\)。否则会减少贡献\(C_i\)。当\(A_i\)是\(0\)......
  • CF603题解
    CF603CodeforcesRound334(Div.1)CF603AlinkCF603A题意现有一个长度为\(n\)的01串,可以进行一次区间翻转(起点终点随意,并且区间里的值1变0,0变1),得到一个新的01串,使得得到的新的01串中的一个子串最长(子串不一定连续),且这个子串是01间隔的,没......
  • pointnet cfd训练
    1#####Point-clouddeeplearningforpredictionoffluidflowfieldsonirregulargeometries(supervisedlearning)#####9importos#提供与操作系统交互的功能,例如文件和目录操作。10importlinecache#提供从文件中读取特定行的方法。11importmath......