20ZR暑期聯賽班 Day 3

2021-10-08 18:28:30 字數 2077 閱讀 5858

原題大賽

可以發現,兩個人相遇後都會掉頭走,這意味著每個人位置的相對順序是不變的。

那麼運用乙個套路,讓相遇的兩個人穿插而過,那麼現在要求排名為任意值的人的位置。

二分套二分即可

結合 link 和 link 可以學到許多與分組有關的 dp 知識。

首先要確定關鍵字排序,當然是按 s

is_i

si​ 排序了,那麼同一組的人的極差就是第乙個人和最後加進的人。那麼正常的 dp 狀態是 fi,

j,kf_

fi,j,k

​ 表示前 i

ii 個人分成 j

jj 組極差和為 k

kk 的方案數,但是不能知道哪個組有沒有結束,所以 j

jj 那一維應該是有 j

jj 組沒有結束。那麼轉移為

f_ +\!= f_ & 作為最小值新開一組 \\ f_ +\!= f_ \times j & 隨便插入一組 \\ f_ +\!= f_ \times j & 作為最大值結束一組 \\ f_ += f_ & 作為最小值和最大值新開一組並結束 \end

⎩⎪⎪⎪⎨⎪

⎪⎪⎧​

fi+1

,j+1

,k−s

i​​+

=fi,

j,k​

fi+1

,j,k

​+=f

i,j,

k​×j

fi+1

,j−1

,k+s

i​​+

=fi,

j,k​

×jfi

+1,j

,k​+

=fi+

1,j,

k​​作

為最小值

新開一組

隨便插入

一組作為

最大值結

束一組作

為最小值

和最大值

新開一組

並結束​

第四個容易落掉。用滾動陣列優化掉第一維,然後這樣 dp 還需要乙個偏移量防止陣列下標出現負數,複雜度為 o(n

2×∑i

si)o(n^2 \times \sum_i s_i)

o(n2×∑

i​si

​),會超時。

優化的應該是 k

kk 這一維,因為我們求的是極差和 <

k<

k ,但這個 k

kk 有很多想去不掉的冗餘狀態。那麼神仙來了,他用了差分的思想,令 si=

ai−a

i−1s_=a_-a_

si​=ai

​−ai

−1​ai−

aj=a

i+1−

ai+a

i+1−

ai+2

+ai+

2−ai

+1+⋯

+aj=

aj−1

⇕ai−

aj=∑

k=i+

1jsk

a_-a_=a_ - a_i + a_ - a_ + a_ - a_ + \cdots + a_j = a_\\ \updownarrow \\ a_-a_=\sum_^ s_

ai​−aj

​=ai

+1​−

ai​+

ai+1

​−ai

+2​+

ai+2

​−ai

+1​+

⋯+aj

​=aj

−1​⇕

ai​−

aj​=

k=i+

1∑j​

sk​

可以發現這個式子在不斷增長的,所以只需要轉移 k

kk 以內的即可。

01 trie 的板子,有異或、和、或三個情況,會寫在這 link。

20ZR提高組十聯測 Day3

沒啥意義吧。就是乙個圖一定可以分成兩個點集,之間的邊個數一定可以超過總邊數一半,正確性顯然。wyz 神仙吊打 std。舉乙個 k 2 k 2k 2 的栗子。000 111001 10000101 10100 如果將連續的 k kk 個相同數稱為合法串,那麼合法串是可以任意移動的。而且你可以同時移動初...

20ZR普及五連測 Day1

請問有多少個長度為 n nn 的排列 p pp 滿足 i pi 1 i p i leq1 i pi 1,答案對 998244353 998244353 998244 353 取模。設 f if i fi 為確定了前 i ii 位的排列個數,那麼第 i ii 個位置要不然填 i ii,要不然填 i 1...

20ZR普轉提七連測 Day1

進行 dmo d360 d bmod 360 dmod36 0 討論一下,發現有四個 兩個 乙個一迴圈。然後預處理前四次操作的答案即可,注意對絕對值的處理。如果能確定吃哪些餐館,當然就是不回頭依次吃。那麼列舉那個餐館一定吃,在它之前的餐館可能吃也可能不吃,二分一下吃耗時最小的多少個餐館,套個區間前 ...