NOIP2016提高A組模擬9 9 運輸妹子

2021-07-22 15:01:37 字數 2297 閱讀 3712

description

小軒軒是一位非同一般的的大農(lao)場(si)主(ji),他有一大片非同一般的農田,並且坐落在一條公路旁(可以認為是數軸),在他的農田裡種的東西也非同一般——不是什麼水稻小麥,而是妹子。

在小軒軒的細心培育下,他的大片農田都要結出妹子啦!但是他的農田分布實在是太廣闊了,他擔心自己的妹子會令路過的人想入非非,於是他想要把所有農田上的妹子都集中到乙個倉庫裡面,貯存起來。可是妹子太多,他叫來了一輛卡車,這輛卡車剛好可以裝滿乙個農田的妹子,並且在滿載的情況下,運滿滿一卡車妹子走1公尺的費用是1元。由於小軒軒技術精湛,他的每個農田產量都是一樣的。即把乙個農田的妹子都運到倉庫費用為農田與倉庫座標差值的絕對值。理想很美好,但現實很殘酷——小軒軒還沒有想好在什麼位置搭建他的倉庫,而且他的運輸費用是有限的。

請你幫忙計算一下,在什麼位置搭建倉庫,使得小軒軒能收穫的妹子最多。(倉庫的位置可與農田的位置重合,並且在公路長度範圍內)。

input

第一行三個正整數 n,l,w,分別表示農田個數、公路總長度、總錢數。

接下來 n 行,每一行描述乙個農田的座標。(可能有多個農田位於同一位置)

output

乙個整數,小軒軒最多能夠收藏多少個農田的妹子。

sample input

5 23 18

4 6

14 18

22sample output

3data constraint

對於 30% 的資料,n≤1000,l≤10000。

對於 60% 的資料,n≤10000,l≤1000000。

對於 100% 的資料,n≤100000,l≤1000000000,w≤2000000000000000。

此題可用二分。

吐槽一句: l壓根就沒用 (#‵′)凸

我們可以二分答案,

然後列舉區間。

在這個區間裡,所有農場到倉庫的花費要<=w即為合法。

而倉庫的位置很顯然是這段區間裡的中位數,即最中間的農田。

然而確定了農田,花費怎麼算呢?

我們有很多種計算方法。

我用的是乙個字首和陣列pre,記錄前i個座標的和。

我們可以拿樣例說明

4 6 14 18 22
p: 4 10 24 42 64

假設我們選定1~4區間,

那麼mid=2

即倉庫為6這個座標。

花費為: 18−

6+14−

6+6−

4 =18

+14−2

∗6+6

∗1−4

然後計算公式就可以化簡了

推廣為一般式為: pr

e[y]

−pre

[mid

]−(y

−mid

)∗a[

mid]

+a[m

id]∗

(mid

−x)−

(pre

[mid

]−a[

mid]

−pre

[x−1

])

這裡ps一下

i~j區間的和為pre[j]-pre[i-1];

那麼i+1~j區間的和為pre[j]-pre[i];

最後二分完要特判一下

#include 

#include

#include

#include

#include

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

#define n 100005

using

namespace

std;

int n,len;

long

long a[n],pre[n],w;

inline

long

long read()

while(ch>='0'&&ch<='9')

return x*w;

}long

long calc(int x,int y)

bool check(int mid)

int main()

if (check(r)) printf("%d\n",r);

else

printf("%d\n",l);

}

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...

NOIP2016提高A組模擬9 2 單峰

問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...