2022寒假刷題計劃
阿新 • • 發佈:2022-01-28
1.28
P4310 絕世好題
二進位制小清新dp,\(O(n\log n)\)
CF618F Double Knapsack
神仙構造,大膽猜想,小心求證。
猜想一定存在兩段連續的序列滿足答案。
字首和有 \(n+1\) 項,嘗試構造值域為 \(n\) 以利用鴿巢定理。
\(suma[i1]-suma[j1]=sumb[i2]-sumb[j2]\) 可以轉換為
\(sumb[i2]-suma[i1]=sumb[j2]-suma[j1]\)。
找到第一個大於等於 \(suma[i]\) 的 \(sumb[j]\),此時因為 \(b[j]\in[1,n]\),故 \(sumb[j]-suma[i]\in[0,n)\)
P2371 [國家集訓隊]墨墨的等式
同餘最短路入門題。
同餘最短路用來求 \(n\) 個數 \(a_1,a_2\cdots\) 在一定範圍內能湊出多少數。
我們任意找一個 \(a_x\) 記為 \(x\)。
把所有自然數按對 \(x\) 取模分為 \(x\) 類。
我們只要找到每一類中第一個能被湊出的數 \(p\),那麼該類中後面的數都可以通過 \(p+k\times x\) 湊出來。
考慮如何找到每類中第一個能被湊出的數,建一張有 \(x\) 個點的圖,每個點代表每一類數,那麼每個點 \(i\) 連一條有向邊 \((i,(i+a[j])\bmod x)\)
然後我們選擇 \(x\) 時如果選擇最小的 \(x\) 就可以讓點數最小,從而降低時間複雜度。
一篇優質博