[雜題合集] 25 歲小夥突然沒了心跳,他的習慣很多年輕人都有!
阿新 • • 發佈:2021-10-28
走營銷號的路,讓營銷號無路可走。
目錄
。這樣一次操作就可以轉化為選擇 \(i,j(1\le i<j\le n+1)\),令 \(c_i\leftarrow c_i-1,c_j\leftarrow c_j+1\)。轉化之後,就可以發現最小操作次數就是 \(\sum_{i=1}^{n+1} \max\{c_i,0\}\)。
進行匹配,變成零。所以 \(\sum_{i=1}^{n+1} \max\{c_i,0\}\) 就是總的匹配對數,而且,\(\sum_{i=1}^{n+1} \max\{-c_i,0\}\) 也是答案。
,畫出影象可知,當 \(x,a-x\) 接近時總和更小。所以結論得證。
砍竹子
題目描述
有 \(n\) 棵高度為 \(d_i\) 的竹子。一次操作 \([l,r]\) 可以使 \([l,r]\) 之間的竹子高度減一,你不能操作高度為零的竹子。首先,你需要 最小化 將所有竹子砍沒的操作次數。另外,對於操作 \([l,r]\),它的權值為 \((r-l+1)^2\),你還需要計算,在最小化操作次數時,可以構造的最大與最小的權值和。
權值和對 \(10^9+7\) 取模。
\(n\le 3\cdot 10^5,0\le d_i\le 10^9\)。
解法
首先,這種區間權值加/減問題一般先差分看一下:令 \(c_i=d_i-d_{i-1}(1\le i\le n+1)\)
考慮證明。首先由於 \(d_0=d_{n+1}=0\),\(\sum_{i=1}^{n+1}c_i=0\)。而且由於 \(\forall i\in[1,n],d_i\ge 0\),我們可以保證 \(\forall i\in[1,n+1],\sum_{j=1}^ic_j\ge 0\),這也就意味著每個小於零的 \(c\) 都可以和前面某些 \(c\)
接下來考慮如何最大/最小化權值和。
先給出構造方法:在遍歷到 \(c_i>0\) 時,將其塞進一個佇列。對於最大化,就是將 \(c_i<0\) 的數字儘量與隊尾匹配;反之,儘量與隊頭匹配。
證明可以用調整法。假設 \(i<i'<j<j'\),現在 \((i,j),(i',j')\) 各進行 一次 匹配,我們需要證明這比 \((i,j'),(i',j)\) 各進行 一次 匹配更小。首先可以發現這兩種方案第二項的和減第一項的和相等,那麼實際上就是研究函式 \(y=x^2+(a-x)^2=2x^2-2ax+a^2\)
複雜度 \(\mathcal{O}(n)\)。