JZOJ 4770 閉門造車(平面最近點對)

2021-07-22 16:24:05 字數 1371 閱讀 4180

自從htn體驗了一把飆車的快感,他就下定決心要閉門造車!但是他兩手空空怎麼造得出車來呢?無奈的他只好來到了汽車零部件商店。

一走進商店,玲琅滿目的各式零件看得htn眼花繚亂。但是他很快便反應過來:我只要買一套好的零件就行。首先它們的效能差不能太大,否則汽車的相容性不好,開著開著就損壞了;其次,當然是越便宜越好了!為了打造一輛頂級跑車,htn陷入了沉思……

現在商店中有 n 件零件,給出這 n 件零件的**,其效能等於**。htn要從中購買一套零件,即選取這個序列的乙個子串(連續一段)。要求如下:

1、這一套零件個數要大於等於2(這才算一套)。

2、這套零件的效能差為首尾兩個零件的效能差(htn覺得每乙個都比較效能差實在是太累了)。

3、購買這套零件的**和為它們各自**的總和。

4、最終的總花費為 效能差²+**和²。

5、由於商店最近有優惠活動,所以每一套零件的第乙個都是免費的。對此毫無經驗的htn只好向經驗豐富的你求助了。

對於 100% 的資料, n≤100000。

其實這題可以用水法水過。

不知道對不對,it is said that用ljj水法可以過,並且有證明長度太長會爆long long

那我就不明白了,我比賽打水法過了後來乖乖去打正解了qaq

這其實就是乙個最近點對的裸題。可以用分治法解決。

大概就是一開始按x座標排序。

弄乙個mid,其座標設為(x

,y) ,表示中間的那條線,假設已求出左右兩邊的最短距離,取個min再開根,令其為di

s 。

這時候,合法點對x座標必然在[x-dis,x+dis]區間內,y座標必然相差不超過dis。

顯然對於給定乙個點與之對應的點不會超過6個(畫一畫就知道了),因為否則就會違反最短距離為dis的條件。

所以複雜度為o(

nlog

n)

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

typedef long long ll;

const int n=100010;

const ll inf=21474836470000;

int n;

struct node

a[n],b[n];

bool cmp(node a,node b)

ll s

qr(ll x)

ll dis(node a,node b)

ll dfs(int l,int r)

}return ans;

}int main()

C 閉門造車(C 類的應用)

造乙個車子的類,上色,裝引擎和輪子,然後加油讓它跑起來。每跑10分鐘,提示一次油量。油量低於10,發出警告提示是否加油。include define full gas 85 int j 0 class car void car setcolor std string col 上色 void car ...

NOIP2016提高A組模擬9 9 閉門造車

description 自從htn體驗了一把飆車的快感,他就下定決心要閉門造車!但是他兩手空空怎麼造得出車來呢?無奈的他只好來到了汽車零部件商店。一走進商店,玲琅滿目的各式零件看得htn眼花繚亂。但是他很快便反應過來 我只要買一套好的零件就行。首先它們的效能差不能太大,否則汽車的相容性不好,開著開著...

NOIP2016提高A組模擬9 9 閉門造車

自從htn體驗了一把飆車的快感,他就下定決心要閉門造車!但是他兩手空空怎麼造得出車來呢?無奈的他只好來到了汽車零部件商店。一走進商店,玲琅滿目的各式零件看得htn眼花繚亂。但是他很快便反應過來 我只要買一套好的零件就行。首先它們的效能差不能太大,否則汽車的相容性不好,開著開著就損壞了 其次,當然是越...