SCOI2007 組隊 差分

2022-04-29 21:42:13 字數 1354 閱讀 8425

題面:[scoi2007]組隊

題解:一開始固定h然後找性質找了很久也沒有找到任何有用的東西。。。。。。

然後大佬告訴我乙個神奇的方法。。。

首先我們化一波式子:

設$h$表示高度的最小值,$v$表示速度的最小值

$$a(h[i] - h) - b(v[i] - v) \le c$$

$$ah[i] - ah + bv[i] - bv \le c$$  

如果我們列舉$h[i]$,那麼$h[i]$就可以被當做乙個常量,於是我們把常量都放在一起。

設$$s_ = ah[i] - ah - c$$

則$$s_ + bv[i] - bv \le 0$$

$$s_ + bv[i] <= bv$$

$$\frac} + v[i] \le v \le v[i]$$

最後那個$\le v[i]$是因為v是最小值.

於是我們可以發現,在固定h的情況下,對於任意乙個v[i],它可以對在$[\frac} + v[i], v[i]]$之間的v產生貢獻。

於是對於每個固定的h,我們的最大答案就看v最大能被多少個點產生貢獻。

差分維護即可

1 #include2

using

namespace

std;

3#define r register int

4#define ac 5500

5#define ac 101000

6#define ll long long78

intn, ans, maxn, d[ac];

9int

a, b, c;

1011

struct

node

14}s[ac];

1516 inline int

read()

1723

24 inline void upmax(int &a, int

b)27

28 inline void

pre()

2936 sort(s + 1, s + n + 1

);37}38

39void

work()

4051

int tmp = 0;52

for(r j = 1; j <= maxn; j ++)

53 tmp += d[j], upmax(ans, tmp), d[j] = 0;54

}55 printf("

%d\n

", ans);56}

5758

intmain()

59

view code

不知道為什麼卡不過大佬qaq。。。

P4165 SCOI2007 組隊 推柿子 差分

題意 a h a m inh b s b mi ns c a times h a times min h b times s b times min s le c a h a minh b s b mins c 我們發現有三個變數,所以最暴力的複雜度是o n 3 o n 3 o n3 的,那麼我們考...

SCOI2007 壓縮 題解

給乙個由小寫字母組成的字串,我們可以用一種簡單的方法來壓縮其中的重複資訊。壓縮後的字串除了小寫字母外還可以 但不必 包含大寫字母r與m,其中m標記重複串的開始,r重複從上乙個m 如果當前位置左邊沒有m,則從串的開始算起 開始的解壓結果 稱為緩衝串 bcdcdcdcd可以壓縮為bmcdrr,下面是解壓...

SCOI2007 修車 題解

上古網路流題 為了便於考慮每個決策的貢獻,把每個工人的決策拆成n個彼此獨立的決策 即其修的倒數第i個車是什麼。因為此車後 含此車 有i人要多等t,故貢獻為t n 以此拆點建圖,以貢獻為費用跑 二分圖 費用流即可,由費用流性質可知每人修車順序必合法 注意本題n,m順序有點反常 include incl...