首页 > 其他分享 >Codeforces 823B

Codeforces 823B

时间:2022-10-22 13:45:44浏览次数:41  
标签:右边 个点 左边 Codeforces 距离 823B 坐标轴 该点

题意:

对若干正整数二元组\((x_i,t_i)\),求一个实数\(x_0\),使得\(max\{ t_i+|x_i-x_0|\}\)最小。n<=1e5。

思考:

​ 虽然问的是\(x_0\),但不妨对这个最小的最大值进行二分,也就是——对于当前mid,是否存在\(x_0\)使得任意\(t_i+|x_i-x_0|<=mid\)。对每个i对应的不等式,解得\(x_i+(mid-t_i)<=x_0<=x_i-(mid-t_i)\),记为\(l<=x_0<=r\)。如果\(x_0\)存在,那它便需要满足所有的不等式,我们把约束条件合并,得到\(l_{max}<=r_{min}\)。最后一次二分的\(l_{max}\)或\(r_{min}\)(反正相差足够小)就是我们想要的解(因为随着mid越靠近最优结果,lr肯定越靠近一个值)。

官方题解和个人感悟:

​ 考虑当t均为0时,问题转换到坐标轴上,很显然无论\(x_0\)位于何处,离它最远的点要么是最左点,要么是最右点,我们取中心即可。当引入\(t_i\)后,我们便又多了一维坐标轴(表示\(t_i\)的值),所问距离也变成了平面上的曼哈顿距离,然后依旧是在原坐标轴上寻找\(x0\)。

​ 对于二元组\((x_i,t_i)\),我们可以考虑将\(t_i\)“扳”回到原坐标轴上。比如当\(x_0\)在\(x_i\)左边时,\(t_i\)应“扳”向右边,也就是把\(x_i\)向右移动\(t_i\)从而向上一段的特殊情况转换。如果“扳”向左边,那么其对结果的贡献显然会被“扳”向右边的值给隐匿掉(因为绝不会比“扳”向右边更优)。

也就是说,若一个个体在假定不同的解时有不同的状态,我们可以尝试将拆它所有状态拆分出来使之独立,满足这些状态最后只有一个会作出贡献,其余的会被隐匿掉。

如此一来,将所有二元组转换为\(x_i+t_i\)和\(x_i-t_i\),取最大值和最小值的平均值,即解。

相关问题:

对若干整数\(x_i\),求一个实数\(x_0\),使得\(\sum |x_i-x_0|\)最小。

结论:最优的解就是这些数的中位数

证明:

​ 想象一数轴,任意找一个点,它左边有4个点,右边有2个点,把该点往左移动一点点,不要移动太多,以免碰到其他输入点。假设移动了d单位距离,则该点到左边4个点的距离各减少d,该点都右边2个点的距离各增加d,但总的来说,距离之和减少了2d。

​ 同理,该点的左边有2个点,右边有4个点时,类似,不过此时应该是向右移动。

​ 换句话说,只要该点的左右两边的输入点个数不一样多,就不是最优解。那什么情况下,左右点一样多呢?如果输入点有奇数个,则最优解应该是中间那个点即中位数。如果有偶数个,则可以位于最中间两个点的任意位置(还是中位数)。

标签:右边,个点,左边,Codeforces,距离,823B,坐标轴,该点
From: https://www.cnblogs.com/blover/p/16815958.html

相关文章

  • Educational Codeforces Round 138 (Rated for Div. 2) A-E
    比赛链接A题解知识点:贪心。注意到\(m\geqn\)时,不存在某一行或列空着,于是不能移动。而\(m<n\)时,一定存在,可以移动。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代......
  • Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces
    Dashboard-EducationalCodeforcesRound138(RatedforDiv.2)-Codeforces这场比赛写的就很菜了。D题有点思路但是没想到是求是去求不满足条件的序列。1.Problem......
  • Codeforces Round #828 (Div. 3)
    CodeforcesRound#828(Div.3)1.Problem-D-Codeforces只要找有因子2的个数即可。只要因子个数是大于等于n的即可。voidslove(){cin>>n;fel(i,1,n)cin......
  • Codeforces Round #756 (Div. 3) E1
    E1.EscapeTheMaze(easyversion)我们显然遍历根节点到叶结点的同时维护最短距离然后在return的时候看该点距离是否大于最近的朋友的距离要是大于的话我们显然可以......
  • Heidi and Library (hard) | CodeForces 802C最大流最小费用
    神仙题,想了两节ds课没想出来,跑到奇怪的犄角旮旯去了还是没法搞一个满意的模型看了洛谷黑题啊..释然了思路和细节在代码//LUOGU_RID:90857083#include<bits/stdc++.h......
  • Codeforces Round #760 E
    E.Singers'Tour我们显然可以推式子b[i]=a[i]+2a[i+1]+3a[i+1]....b[i+1]=na[i]+a[i+1]+2a[i+2]....这样b[i+1]-b[i]=-n*a[i]+(a[i]+a[i+1]+....+a[n])我们显然......
  • Educational Codeforces Round 83 (Rated for Div. 2) C. Adding Powers(进制转换)
    https://codeforces.com/contest/1312/problem/C题目大意:给定一个长度为n的数组a,在给定一个底数k。一开始数组元素全部都是0,我们每一个时间i可以选择一个下标下的数字......
  • Educational Codeforces Round 138 (Rated for Div. 2) ABC(二分)
    只能说这场的出题人不适合我食用,ABC都读了假题,离谱啊~A.CowardlyRooks题目大意:给定一个棋盘n*n的大小,左下角的顶点在(1,1);给定了棋盘格上的m个棋子坐标。这m个棋子......
  • 「题解」Codeforces 1730F Almost Sorted
    给定一个长度为\(n\)的置换\(p\),以及一个正整数\(k\).对于一个置换\(q\),要求对于所有满足\(1\leqi<j\leqn\)的\(i,j\),有以下不等式成立:\[p_{q_i}\leqp_{q_j}+......
  • Codeforces Round #762 (Div. 3) E
    E.MEXandIncrements我们一看数据n个数还要计算n+1一个mex显然不能暴力我们考虑后面的i可以由前面的贪心的做一次操作转移过来所以我们记录一个a数组放着多出来的......