NOIP2016提高A組五校聯考1 挖金礦

2021-07-23 09:46:49 字數 900 閱讀 8406

答案,保留4位小數

4 3

4 3 3

5 1 6

2 6 1

3 2 9

4.4286

n*m<=100000

很簡單的一道題

設sum[i][j]表示第i列向下挖j行的字首和

假設第i列挖h[i]行

設二分的答案是m,答案如果合法,那麼 ∑n

i=1s

um[i

][h[

i]]∑

ni=1

h[i]

>=m

移項 ∑i=

1nsu

m[i]

[h[i

]]−h

[i]∗

x>=0

那麼二分後列舉得到∑n

i=1s

um[i

][h[

i]]−

h[i]

∗x,判斷是否大於0即可

#include

#include

#include

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

#define n 100100

#define db double

using

namespace

std;

int n,m,q,tot=0;

db f[2][n],a[n];

int main()

if(jy<0) r=x;else l=x;

}printf("%.4lf",l);

}

NOIP2016提高A組五校聯考1 道路規劃

我們考慮,當現在有乙個合法的集合時,如何往裡面增加乙個點,使這個集合仍然合法。假設現在有乙個合法的集合,那麼當我們加入乙個點,它的道路穿過來整個集合,那麼 然後搞一遍最長下降子串行就可以了。include include include include include const int maxlo...

NOIP2016提高A組五校聯考1 挖金礦

剛看到這題時,還在想怎麼貪心,然後很快的打完之後發現貪心是錯的。然後仔細的看了看範圍,哈哈,這不是二分嗎。二分出乙個mid,然後在所有行裡面用mid j 字首和然後找乙個最大值。最後把這些最大值加起來,判斷一下就好了。include include include include include i...

NOIP2016提高A組五校聯考1 道路規劃

一開始想到了70分的,然後很快發現線段樹的優化,結果乙個細節掛掉qaq 首先70分的話就是乙個f i 表示上面的位置最後乙個為i的時候可以選的最大的集合,顯然在下面的值相同的那個點一定是在最右邊的,那麼直接n2 即可 然後100分的話就是拿線段樹,那麼就可以用log的時間來求出每乙個f i 的值 v...