Решение проблем Baidu Star 2023

BD202309 Межзвездное путешествие

В глубокой вселенной межзвездный флот отправляется с Земли и направляется к неизведанной межзвездной бездне. Этот флот представляет собой кристаллизацию новейших технологий и состоит из nn межзвездных космических кораблей, каждый из которых подобен яркой звезде, тихо плывущей через бездну Вселенной.

Путешествие космического корабля тихо и загадочно, как призрак, плывущий по вселенной, бесшумно путешествующий среди звезд. Однако это тихое звездное небо небезопасно, и неизвестные опасности могут прийти в любой момент. Это требует от членов флота всегда сохранять бдительность, как будто они сталкиваются с могущественным врагом.

Однако путешествие прошло не так гладко, как ожидалось. Где-то глубоко в звездном небе флот получил сигнал тревоги от земного прибора обнаружения.Флот вошел в зону обнаружения инопланетной цивилизации.Флот надеялся выстроиться в непрерывную прямую линию, чтобы уменьшить вероятность обнаружения флота инопланетной цивилизацией.

Каждый КА можно рассматривать как точку в трехмерном пространстве, а ii-й КА можно представить трехмерными координатами (x_i,y_i,z_i)(xi​,yi​,zi​). Координаты n космических аппаратов, расположенные по непрерывной прямой, должны удовлетворять следующим условиям: две из этих координат точек имеют одинаковые размеры, а оставшаяся одна размерность должна образовывать непрерывную целочисленную последовательность. Например, когда 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), эти точки можно рассматривать как находящиеся на непрерывной прямой. Обратите внимание, что в приведенном выше примере размерные координаты x, yx и y для nn точек одинаковы.Они также могут быть одинаковыми размерными координатами 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;
}

Guess you like

Origin blog.csdn.net/qq_71356343/article/details/132410710