Codeforces 题面传送门 & 洛谷题面传送门

分类讨论神题。

首先看到最大值最小,一眼二分答案,于是问题转化为判定性问题,即是否 \(\exists x_0,y_0,z_0\) 满足 \(\forall i,|x_0-x_i|+|y_0-y_i|+|z_0-z_i|\le mid\)。

柿子中带个绝对值,不好直接转化。不过注意到对于任意实数 \(x\) 都有 \(x\le |x|,-x\le |x|\),因此 \(|x-y|\le v\) 的充要条件即是 \(x-y\le v,y-x\le v\),因此上式可以把绝对值拆开得到:

\[\begin{cases}
x_0-x_i+y_0-y_i+z_0-z_i\le mid\\
x_0-x_i+y_0-y_i+z_i-z_0\le mid\\
x_0-x_i+y_i-y_0+z_0-z_i\le mid\\
x_0-x_i+y_i-y_0+z_i-z_0\le mid\\
x_i-x_0+y_0-y_i+z_0-z_i\le mid\\
x_i-x_0+y_0-y_i+z_i-z_0\le mid\\
x_i-x_0+y_i-y_0+z_0-z_i\le mid\\
x_i-x_0+y_i-y_0+z_i-z_0\le mid
\end{cases}
\]

将上式整理一下可以得到:

\[\begin{cases}
x_i+y_i+z_i-mid\le x_0+y_0+z_0\le x_i+y_i+z_i+mid\\
-x_i+y_i+z_i-mid\le -x_0+y_0+z_0\le -x_i+y_i+z_i+mid\\
x_i-y_i+z_i-mid\le x_0-y_0+z_0\le x_i-y_i+z_i+mid\\
x_i+y_i-z_i-mid\le x_0+y_0-z_0\le x_i+y_i-z_i+mid
\end{cases}
\]

记 \(A_{l}=\max\limits_{i=1}^nx_i+y_i+z_i-mid,A_{r}=\min\limits_{i=1}^nx_i+y_i+z_i-mid\),\(B_{l},B_r,C_l,C_r,D_l,D_r\) 也同理,那么显然上述柿子可以等效于:

\[\begin{cases}
A_l\le x_0+y_0+z_0\le A_r\\
B_l\le -x_0+y_0+z_0\le B_r\\
C_l\le x_0-y_0+z_0\le C_r\\
D_l\le x_0+y_0+z_0\le D_r
\end{cases}
\]

注意到这四个不等式中间一项都带三个未知数,不好处理,不过这三个未知数之间又存在某种联系,因此考虑记 \(a=-x_0+y_0+z_0,b=x_0-y_0+z_0,c=x_0+y_0-z_0\),那么有 \(x_0=\dfrac{b+c}{2},y_0=\dfrac{a+c}{2},z_0=\dfrac{a+b}{2}\)。我们还可以注意到 \(x_0+y_0+z_0=a+b+c\),因此柿子又转化为

\[\begin{cases}
A_l\le a+b+c\le A_r\\
B_l\le a\le B_r\\
C_l\le b\le C_r\\
D_l\le c\le D_r
\end{cases}
\]

当然这里有一个 restriction 是 \(x_0,y_0,z_0\) 必须都是整数,因此必须有 \(a\equiv b\equiv c\pmod{2}\)。故考虑枚举 \(r=a\bmod 2\),记 \(a'=\dfrac{a-r}{2},b'=\dfrac{b-r}{2},c'=\dfrac{c-r}{2}\),那么上式又变为:

\[\begin{cases}
\lceil\dfrac{A_l-3r}{2}\rceil\le a'+b'+c'\le\lfloor\dfrac{A_r-3r}{2}\rfloor\\
\lceil\dfrac{B_l-r}{2}\rceil\le a'\le\lfloor\dfrac{B_r-r}{2}\rfloor\\
\lceil\dfrac{C_l-r}{2}\rceil\le b'\le\lfloor\dfrac{C_r-r}{2}\rfloor\\
\lceil\dfrac{D_l-r}{2}\rceil\le c'\le\lfloor\dfrac{D_r-r}{2}\rfloor
\end{cases}
\]

这个随便求一求就行了,我相信即便刚学过 OI 的应该也会罢。

时间复杂度 \(n\log A\),其中 \(A=\max\{a_i\}\)

const int MAXN=1e5;
const ll INF=7e18;
int n;ll x[MAXN+5],y[MAXN+5],z[MAXN+5],X,Y,Z;
ll down(ll x){return (x>=0)?(x>>1):(-(-x+1>>1));}//\lfloor x/2 \rfloor
ll up(ll x){return (x>=0)?(x+1>>1):(-(-x>>1));}//\lceil x/2 \rceil
bool check(ll mid){
ll al=-INF,ar=INF,bl=-INF,br=INF;
ll cl=-INF,cr=INF,dl=-INF,dr=INF;
for(int i=1;i<=n;i++){
chkmax(al,x[i]+y[i]+z[i]-mid);chkmin(ar,x[i]+y[i]+z[i]+mid);
chkmax(bl,-x[i]+y[i]+z[i]-mid);chkmin(br,-x[i]+y[i]+z[i]+mid);
chkmax(cl,x[i]-y[i]+z[i]-mid);chkmin(cr,x[i]-y[i]+z[i]+mid);
chkmax(dl,x[i]+y[i]-z[i]-mid);chkmin(dr,x[i]+y[i]-z[i]+mid);
}
for(int r=0;r<2;r++){
ll wl=up(al-3*r),wr=down(ar-3*r);
ll xl=up(bl-r),xr=down(br-r);
ll yl=up(cl-r),yr=down(cr-r);
ll zl=up(dl-r),zr=down(dr-r);
if(wl<=wr&&xl<=xr&&yl<=yr&&zl<=zr&&xl+yl+zl<=wr&&xr+yr+zr>=wl){
ll a=xl,b=yl,c=zl,need=max(0ll,wl-xl-yl-zl);
a+=min(need,xr-xl);need-=min(need,xr-xl);
b+=min(need,yr-yl);need-=min(need,yr-yl);
c+=min(need,zr-zl);need-=min(need,zr-zl);
a=(a<<1|r);b=(b<<1|r);c=(c<<1|r);
X=b+c>>1;Y=c+a>>1;Z=a+b>>1;return 1;
}
} return 0;
}
void solve(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
ll l=0,r=INF>>1,p=-1;
while(l<=r){
ll mid=l+r>>1;
if(check(mid)) p=mid,r=mid-1;
else l=mid+1;
} check(p);//printf("%lld\n",p);
printf("%lld %lld %lld\n",X,Y,Z);
}
int main(){
int qu;scanf("%d",&qu);
while(qu--) solve();
return 0;
}

Codeforces 685C - Optimal Point(分类讨论+乱搞)的更多相关文章

  1. Codeforces 1513F - Swapping Problem(分类讨论+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 简单题,难度 *2500 的 D2F,就当调节一下一模炸裂了的自闭的心情,稍微写写吧. 首先我看到这题的第一反应是分类讨论+数据结构,即枚 ...

  2. codeforces 653C C. Bear and Up-Down(乱搞题)

    题目链接: C. Bear and Up-Down time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  3. Codeforces Gym 100203G Good elements 暴力乱搞

    原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 考虑暴力的复杂度是O(n^3),所以 ...

  4. CodeForces 81D.Polycarp's Picture Gallery 乱搞

    D. Polycarp's Picture Gallery time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  5. CodeForces 788B - Weird journey [ 分类讨论 ] [ 欧拉通路 ]

    题意: 给出无向图. good way : 仅有两条边只经过一次,余下边全经过两次的路 问你共有多少条不同的good way. 两条good way不同仅当它们所经过的边的集合中至少有一条不同 (很关 ...

  6. @codeforces - 685C@ Optimal Point

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定若干个三维空间的点 (xi, yi, zi),求一个坐标都为 ...

  7. Codeforces 1461F - Mathematical Expression(分类讨论+找性质+dp)

    现场 1 小时 44 分钟过掉此题,祭之 大力分类讨论. 如果 \(|s|=1\),那么显然所有位置都只能填上这个字符,因为你只能这么填. scanf("%d",&n);m ...

  8. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)

    A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  9. CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)

    CodeForces - 789B 当时题意理解的有点偏差,一直wa在了14组.是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的. 题意告诉你 ...

随机推荐

  1. 转:Linux常用命令总结

    学习linux也有一阵子了,现总结一些常用的linux操作命令,方便大家查找1. cd命令这个命令是最基本的也是最常用的.它用于切换当前目录,可以是绝对路径,也可以是相对路径.例:cd /root/h ...

  2. python的分支结构

    python分支结构 if结构 python的 if 选择分支结构的基础语法如下,需要注意的是判断条件后面是半角的分号,它的作用相当于Java中的小括号 if 判断条件 : 代码块 elif 判断条件 ...

  3. java容器之HashMap

    HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的. 解决哈希冲突的三个方法: a.开放 ...

  4. JMH 使用指南

    简介 JMH(Java Microbenchmark Harness)是用于代码微基准测试的工具套件,主要是基于方法层面的基准测试,精度可以达到纳秒级.该工具是由 Oracle 内部实现 JIT 的大 ...

  5. Qt 项目管理文件(.pro) 详解

    项目文件目录树 在 Qt Creator 中新建一个 Widget Application 项目 samp2_1,在选择窗口基类的页面选择 QWidget 作为窗体基类,并选中"Genera ...

  6. PTA 7-2 邻接表创建无向图 (20分)

    PTA 7-2 邻接表创建无向图 (20分) 采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输 ...

  7. Vue3+Vue-cli4项目中使用腾讯滑块验证码

    Vue3+Vue-cli4项目中使用腾讯滑块验证码 简介: 滑块验证码相比于传统的图片验证码具有以下优点: 验证码的具体验证不需要服务端去验证,服务端只需要核验验证结果即可. 验证码的实现不需要我们去 ...

  8. 3组-Alpha冲刺-3/6

    一.基本情况 队名:发际线和我作队 组长博客:链接 小组人数:10 二.冲刺概况汇报 黄新成(组长) 过去两天完成了哪些任务 文字描述 使用labelimg工具对采集的数据进行标注,安装alphapo ...

  9. Qt分析:Qt中的两种定时器

    QTimer类的定时器 QTimer类定时器是QObject类定时器的扩展版或者说升级版,因为它可以提供更多的功能.比如说,它支持单次触发和多次触发. 使用QTimer类定时器的步骤: (1)创建一个 ...

  10. 【大爽python算法】递归算法进化之回溯算法(backtracking)

    作者自我介绍:大爽歌, b站小UP主 , python1对1辅导老师, 时常直播编程,直播时免费回答简单问题. 前置知识: 递归算法(recursion algorithm). 我的递归教程: [教程 ...