uoj386 UNR 3 鴿子固定器

2022-05-07 20:48:08 字數 1074 閱讀 1845

link

(似乎很久沒寫題解了)

n個物品,每個物品有a,b兩個值,給定a,b,現在最多選其中m個,要求最大化選出的物品中【b權值和的b次方-a極差的a次方】。

$n\leq 2\times 10^5,m\leq 50.$

大概全場最早ac的兩人是miaom&wzf2000,用了非標算的「神奇的做法」,太強辣。

按照a排序以後轉化為選定乙個區間以後最大化區間內部的b權值和。

然後考慮兩種情況:

第一種情況暴力,第二種用鍊錶維護,從小到大刪去數,那麼每次選擇的同樣是連續一段。

時間複雜度$\mathcal(nm)$。

1 #include2

#define rep(i,x,y) for (int i=(x);i<=(y);i++)

3#define ll long long

4#define inf 1000000001

5#define y1 y1___

6using

namespace

std;

7ll read()

13#define n 300005

14int

n,m,a,b,id[n],l[n],r[n];ll ans,a1[n],a2[n],b1[n],b2[n];

15struct

node

18 node(int a_,int b_)

19}q[n];

20bool cmp(node x,node y)

21bool cmp2(int x,int y)

22void

upd(ll x,ll y)

26int

main()41}

42 rep (i,1,n)

50 rep (j,0,m-1) upd(b1[j]+b2[m-j-1],a2[m-j-1]-a1[j]);

51 r[l[x]]=r[x],l[r[x]]=l[x];52}

53 cout

;54return0;

55 }

view code

uoj386 UNR 3 鴿子固定器 貪心

題目鏈結 題解 考慮先把序列按 s s 排序後,將 v role presentation style position relative v v從小到大從中刪去,刪去時用包含它的區間更新答案。為什麼答案一定是一段區間 由於數列中剩下的數 v v 沒有比當前數更小的。用反證法,如果不是一段區間,那麼...

UOJ 308 UNR 2 UOJ拯救計畫

uoj 如果模數很奇怪,我們可以插值一下,設 f i 表示用了 i 種顏色的方案數。然而模 6 這個東西很有意思,6 2 3 所以我們只需要考慮其模 2 和模 3 的結果了。而最終答案的貢獻是 sum k a i f i 當 i ge 3 的時候 6 a k i 所以我們只需要知道 f 0 f 1 ...

uoj308 UNR 2 UOJ拯救計畫

傳送門 題解 考慮列舉用了 i 所學校,那麼貢獻為 cnt i 意思是從 k 所選 i 所出來染色,cnt 為固定顏色順序的染色方案,i 為可以交換學校位置。考慮當 i geq 3 的時候,貢獻含有模數因子6,所以模6為0,相當於沒有貢獻。當 i 1 顯然只有 m 0 有貢獻。對於 m 0 我們特判...