ZROI 19 08 02 雜題選講

2022-05-19 05:13:31 字數 2490 閱讀 4791

顯然乙個絕對值最多選一次。這個性質非常強。

如果所有都是偶數,可以直接除以\(2\)。

否則\(1\)或\(-1\)必須選,暴力列舉選哪個然後遞迴,每層去重,發現最多隻會遞迴\(\log a\)次。總複雜度\(o((n+a)\log n)\),等價於線段樹上區間長度總和。

等價於不下降序列。

設\(f(x)\)表示最後乙個數\(\leq x\)時的最優答案。顯然它形如若干段斜率為整數的折線,且斜率是連續不降的。

最右邊加入\(a\)時,每個位置加上\(|x-a|\),並對\(f(x-1)\)取\(\min\)。

只需要維護拐點,每次加入兩個拐點,並刪去最大的乙個。

最後用\(f(0)=\sum|a_i|\)還原答案。

設\(f_\)表示前\(i\)個數,和為\(j\)的方案數。每次轉移要麼放乙個\(1\)在末尾,要麼所有數均\(+1\)。

暴力dp可以維護每個數的\([0,m]\)次和,轉移的時候乘上組合數。複雜度\(o(n^4)\)。

一點優化是維護每個數的下降冪(似乎組合數也可以),最後用第二類斯特林數還原答案,這樣單次轉移是\(o(1)\)的,複雜度\(o(n^3)\)。

考慮每個數產生的貢獻有多少次。發現就是\(\sum_j[i\)出現至少\(j\)次的方案數\(]\)。

這個可以用\(f_\)算,不需要dp的時候統計答案。複雜度\(o(n^2)\)。

牛頓恒等式:對於首一多項式\(f(x)=\sum_^nc_x^i\),設\(p_i\)為它的\(n\)個根的\(i\)次方和,對於任意正整數\(d\),有等式

\[\sum_^c_i p_+c_d\cdot d =0

\]由\(c\)求\(p\):多項式求逆;由\(p\)求\(c\):多項式\(\exp\)。

本題硬點\(a_i\)是某多項式的\(n\)個根,分治fft求出多項式,求逆即可。複雜度\(o(n\log^2n)\)。

顯然是個迴圈卷積,先dft,用點值計算完再idft回去即可。

考慮容斥,用總數減去不連通的方案數。列舉\(1\)所在的連通塊容斥,複雜度\(o(3^np)\)。

\(o(2^nn^2p)\)的做法有點麻煩,需要高超的生成函式技巧,掉線了。

二分答案,對每個數求出左右最近的滿足條件的位置,設為\(l_i,r_i\)。

問題轉化為判定是否存在\([l,r]\geq m\),使得區間內的任意元素滿足\(l_i\geq l\)或\(r_i\leq r\)。

設\(solve(l,r)\)表示\([l,r]\)內是否存在滿足條件的子區間。

如果\(r-l+1,顯然不行。

如果某個點\(l_i且\(r_i>r\),這個點就不能選,遞迴處理\(solve(l,i-1)|solve(i+1,r)\)。

暴力從左往右掃是\(o(n^2)\)的,考慮兩邊往中間掃,找到就return,這樣是\(t(n)=t(i)+t(n-i)+o(\min(i,n-i))\)的,總複雜度\(o(n\log^2n)\)。

由於方案數不需要考慮順序,可以直接dp,\(f_i=\max(f_+w_j)\),同時更新方案數即可。

發現\(w_i\)不超過\(100\),即每次只有最近的\(100\)個狀態有用。用\(\max\)定義加法,用加法定義乘法,發現是矩乘的變體。

直接做\(o(n^4\log m)\)。考慮預處理出轉移矩陣的\(2^k\)次方,每次用向量乘\(o(\log m)\)個矩陣,總複雜度\(o(n^3\log m)\)。

列舉最大數之後,變成了求一些\(n\)很大,\(m\)不大的組合數。

組合數可以分治:\(c(n,m)=\sum_^mc(x,i)\cdot c(n-x,n-i)\),其中\(x\)可以是任意\([1,n]\)的數。

在這裡就是把\(a\)分成兩半,遞迴處理然後fft合併。

由於每次都是除以\(2\)下取整,所以一遍就可以算出所有\(u\)的答案。複雜度\(o(n\log n\log a)\)。

設\(f_\)為第乙個序列\([x,x+i]\),方式為\(a\),第二個序列\([y,y+i]\),方式為\(b\)是否合法。

如果兩個方式相等,直接判串是否完全相等。

如果其中乙個是中序遍歷,可以遞迴處理。

否則需要列舉左右兒子分界線。

看似\(o(n^4)\),實際上,確定了第乙個序列的區間,第二個序列最多乙個對應區間是合法的(點集完全相同)。所以總複雜度\(o(n^3)\)。

設\(work(l,r)\)表示處理\([l,r]\)的修改,並回答每次修改完的答案。

把修改涉及的邊設為\(\inf\),跑最小生成樹,此時不在其中的邊(未修改的)已經沒用了,直接刪掉。此時邊數為\(o(\)點數\()\)。

把修改涉及的邊設為\(-\inf\),跑最小生成樹,此時在其中的邊一定有用,直接縮點。此時點數為\(o(r-l)\)。

遞迴兩邊處理,每次要對邊排序。複雜度\(o(n\log^2n)\)。

隨乙個初始解,然後調整。

找乙個不滿足條件的點,把它換成乙個可行的顏色。由於度數不超過\(7\),所以一定可行。

用佇列模擬這個過程,每次調整後,兩端顏色相同的邊都會減少,所以一定會結束。複雜度\(o(m)\)。

ZROI 19 08 02 計算幾何

1.向量基礎知識 線段樹維護矩乘就好了,矩陣裡需要帶個常數字置。不會積分,告辭。2.簡單題 投影就是點積,直接積就行了,必修四怎麼學的。跟上面的一模一樣。叉積判出不共線的兩種,剩下的直接比較橫座標就可以了。平行向量叉積為 0 垂直向量點積為 0 跨立實驗 對於一條線段,看另一條線段的兩個點是否在它兩...

2019 2 28 雜題選講

考慮將1至n m分別填入乙個擁有n行m列的 中,不允許重複。你需要滿足以下要求 第i行 1 i n 的最大值為ai。第j列 1 j m 的最大值為bj。請求出合法的填數方案數在模109 7意義下的值。1 n,m 1000 1 ai,bj n m 思路分步 填數 問題符合乘法原理,考慮從大到小填數,先...

雜題選講1 2

把序列排序後 問題轉化為子串行兩兩之間的異或和大於等於k 使用者 trie 樹優化 dp 因為不滿足單調性所以不能用二分來優化 從實際含義入手 ans n 2 sum d1 i dk i sum j k 線性預處理即可 複雜度 o n t 原先做 sa 的題時用過這個套路 列舉長度 len 2 每隔...