2023年百度之星题解

简介: 2023年百度之星题解

BD202309星际航行

在深邃的宇宙中,星际舰队从地球出发,向未知的星际深渊进发。这支舰队是由最新科技的结晶,由 nn 艘星际飞船组成,每一艘飞船都像一颗璀璨的星辰,静静地驶过宇宙的深渊。

飞船的航行是静谧而神秘的,仿佛在宇宙中航行的幽灵,无声无息地穿行在星辰之间。然而,这静谧的星空并不安全,未知的危险随时可能来临。这就需要舰队成员们时刻保持警惕,如临大敌。

然而,这次航行并没有像预期的那样顺利。在舰队深入星空的某个地方,收到来自地球检测装置的警报,舰队已经进入外星文明的探测区域,舰队希望排布成一条连续的直线以减少舰队被外星文明探测到的可能。

每一艘飞船可以看做三维空间上的一个点,第ii艘飞船可以用三维坐标 (x_i,y_i,z_i)(xi,yi,zi) 表示。排布成连续的直线的nn艘飞船坐标应该满足如下条件:这些点坐标中有两个维度相同,剩下一个维度应该组成一个连续的整数数列。例如,当x_1=x_2=…=x_nx1=x2=…=xn且y_1=y_2=…=y_ny1=y2=…=yn且|z_i-z_{i-1}|=1∣zi−zi−1∣=1(i=2…ni=2…n)时,可以认为这些点处于一条连续的直线状态。注意,上述样例中是 nn 个点的 x,yx,y 维度坐标相同,也可以是 y,zy,z 维度坐标相同或者 x,zx,z 维度坐标相同。另外,飞船最终的排列顺序与输入顺序无关。

由于飞船在宇宙中航行受到此地星空的约束,任何时刻飞船只能沿着三个维度中的一个维度飞行,每移动一个单位,会消耗一个单位的能源。

尽管情况紧急,舰队仍然需要为后续的航行做准备。作为舰队成员之一的你,需要给出舰队排成一条连续的直线最少消耗多少能源。


格式

输入格式:


第 11 行,输入的是整数 nn(1 \le n \le 10^51≤n≤105);

接下来的 nn 行分别包含三个数字,表示每艘飞船的坐标,x,y,z(-10^6 \le x,y,z \le 10^6)x,y,z(−106≤x,y,z≤106) 。


输出格式:


一行一个数字,表示最少消耗多少能源。

样例 1

输入:

3

2 0 2

6 35 -87

0 184 -126


输出:


316


备注

样例解释:可行的一组方案为:

把所有点的x移动到2,代价为|2-2|+|6-2|+|0-2|=6;

把所有点的y移动到区间[34,36],代价为|0-34|+|35-35|+|184-36|=182;

把所有点的z移动到区间-87,代价为|-87-2|+|-87-(-87)|+|-87-(-126)|=128;

总代价为:6+182+128=316。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int x[N],y[N],z[N];
int n;
ll cal(int a[]){//计算单点代价
    ll v=0;
    int low=1,high=n;
    while(low<high){
        v=v+abs(a[low++]-a[high--]);
    }
    return v;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i]>>z[i];
    }
    auto f=[](int a,int b){return a<b;};
    sort(x+1,x+n+1,f);
    sort(y+1,y+n+1,f);
    sort(z+1,z+n+1,f);
    ll res=cal(x)+cal(y)+cal(z);
    int low=1,high=n;
    while(low<high){
        //扣除直线代价空缺,0->35=0->34+34->35;184->35=284->36+36->35;
        //前面res是直线到中心,可以看成res->边界+边界->中心
        //现在扣除的是边界->中心
        res-=high-- - low++;
    }
    cout<<res<<endl;
    return 0;
}
相关文章
【 腾讯精选练习 50 题】10—爬楼梯【简单】
【 腾讯精选练习 50 题】10—爬楼梯【简单】
|
4月前
|
算法
力扣算题【第二期】
这是一个关于链表操作的算法总结,包括两个部分:1) 反转链表,通过头插法实现链表反转,代码中使用了迭代方式;2) 判断回文链表,利用快慢指针找到链表中点,翻转后半部分并与前半部分比较。代码中包含详细步骤及辅助的翻转函数。
26 0
|
4月前
华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接
华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接
【 腾讯精选练习 50 题】11—最大子序和【简单】
【 腾讯精选练习 50 题】11—最大子序和【简单】
|
12月前
|
人工智能 BI
百度松果菁英班--oj赛(第一次)
百度松果菁英班--oj赛(第一次)
56 0
|
机器学习/深度学习
百度之星题解(蛋糕划分)
百度之星题解(蛋糕划分)
|
人工智能 物联网 BI
牛客月赛62思考和总结
牛牛在幼稚园做义工,幼稚园中共有 nnn 颗树,第 1 天中午时它们的高度分别为:h1,h2,…,hnh_1,h_2,…,h_nh1​,h2​,…,hn​ (单位:厘米)。每一天的晚上每棵树的高度都会增加 aaa 厘米,而牛牛的任务则是在第二天的清晨检查每一颗树的高度,若某颗树的高度超过了 kkk 厘米牛牛就会将它的高度修剪为 bbb 厘米。牛牛想请你帮它计算一下第 mmm 天中午每一颗树的高度。
107 0
|
人工智能 测试技术
2021年第十二届蓝桥杯模拟赛(第三期)题目和解析
蓝桥杯是指蓝桥杯全国软件和信息技术专业人才大赛。是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛。
351 0
2021年第十二届蓝桥杯模拟赛(第三期)题目和解析