自從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眼花繚亂。但是他很快便反應過來 我只要買一套好的零件就行。首先它們的效能差不能太大,否則汽車的相容性不好,開著開著就損壞了 其次,當然是越...