zr2021神選摸底賽雜題

2022-07-20 16:42:10 字數 2330 閱讀 9272

簡述題意:平面上 n 個點,每個點都是乙個加油站,每個點都有乙個 $c_i$,希望從一號點開車到二號點,油箱上線為 w,你可以在途中進行至多 d 次加油,注意初始時你沒有油,所以出發時一定會加一次油,路途中每走 k 個單位的距離就會消耗 k 單位的油,距離為曼哈頓距離,加 k 單位的油需要花費 $c_i\times k$,球最小花費

資料範圍:$d\leq 10, n\leq 1000, w\leq 100000$

部分分三檔:$n\leq 10$;$n,w\leq 100$;$n\leq 100$

前兩檔部分分可以通過設 dp 狀態 $f[d][i][j]$ 表示當前在 i 號點加第 d 次油,加完後還剩 j 單位油解決

考慮滿分做法

首先可以發現,如果從乙個大點 i 走到乙個小點 j,那麼需要保證離開大點時油箱一定是正好有 dis(i,j) 單位油,那如果從乙個小點走到乙個大點呢

一定要加上 w 單位的油

這好像看起來不太正確啊,但可以用三角不等式證明

假設我們的路途是這樣:小點 i 走到大點 j 然後走到乙個極小點 k,如果 w 單位的油在到達 k 點時還沒消耗完,就是反例了

但是 w 單位的從 i 點加的油一定會在 [j, k] 這個路途中的某乙個位置耗盡,因為,如果沒有耗盡,那麼以為著這油一定能支撐車從 i 走到 k,那麼為什麼要途經 j 呢?所以問題回到大點走到小點的 case

那麼這題就稍微明朗一些了

我們可以把第三維狀態縮小一定的範圍,因為現在我們發現,我們實際有用的狀態數量就是 n 級別的

設 $f[d][i][j]$ 表示當前第 d 次加油,在 i 點,走的時候油箱裡有 dis(i,j) 單位的油,特別地,j=n+1 表示留了 w 單位的油

考慮轉移(這裡為了方便書寫,第三維意義還是油箱剩餘容量)

大點 j 走小點 i:

需要油箱裡有著正好 dis(i,j) 單位的油,所以 $f[d-1][j][dis(j,i)]\rightarrow f[d][i][0]$,我們離開 i 點的時候肯定不能只有 0 的油量,所以還需要向上合併,這個問題先留著,後面再說

小點 j 走大點 i:

需要油箱加滿,所以 $f[d-1][j][w]\rightarrow f[d][i][w-dis(j,i)]$,那麼問題來了,$w-dis(j,i)$ 這個大小我們沒有記啊

一種解決辦法是直接再開 n 個狀態,表示 $w-dis$

另一種辦法是:直接二分到比他大的第乙個狀態位置,設這個位置大小為 c,合併到那裡,同時加上 $(c-(w-dis[j][i]))\times c_i$ 大小

為什麼正確呢?因為上面的那個三角不等式證明,所以從 i 點到後面乙個點的距離,一定大於 $(c-(w-dis[j][i]))$

但是這個二分帶乙個 log,$o(dn^2\log n)$ 複雜度肯定是接受不能的

解決辦法很容易,二分這個過程對於整個做法而言是獨立的,直接預處理就行了,複雜度 $o(dn^2+n^2\log n)$

那麼我們就只剩乙個問題了,如何向上合併

如果每次轉移之後都直接向上轉移到頂你就收穫了乙個 $n^3$ 級別的做法

對於這個問題有個很小的 trick,我們先不合併,先放在轉移到的位置上,把當前這個點全部 dp 完了之後,再從最底部直接統一合併到頂

總複雜度:$o(n^2(d+\log n))$

沒**簡述題意:給定兩個序列分別長 n 和 m,m序列初始全為0,n序列給定,$n_i\leq m$,支援三種操作,分別是:1.查詢m序列(輸出整個序列);2.n序列上區間賦值;3.將n序列上 [l,r] 區間內的每個 $n_i$,作為下標,對應到 m 序列上,把對應到的位置加上 x

資料範圍:查詢次數可以看作一次,其他資料全部小於100000

solution1:

正難則反,考慮將操作序列全部倒置來做,對於一次區間加操作,我們可以直接種一顆大小為 n 的線段樹,直接區間加

對於區間覆蓋操作,我們可以把覆蓋的區間求和然後清零,然後將求和的值直接加到覆蓋的值對應的位置上

查詢操作直接查查就好

$o(n\log n)$

solution2:

上面的做法其實不是很好想,考慮比較常規的做法

一種套路地做法,我們可以把顏色相同的一段連續子串行看成乙個點

那麼對於覆蓋操作,我們可以直接把區間涉及到的小子序列合併成乙個顏色,即乙個點,當然,兩頭可能會有多餘的位置,再開兩個點就好

這個操作總共複雜度是 o(n) 級別的,因為在不斷合併連續的子串行,每次最多新產生三個子串行

可以用 set 記錄所有子串行的左端點來維護

考慮區間加操作,直接種棵線段樹就好了,和上面做法差不多

$o(n\log n)$ 但常數較大且不是很好寫

優化:對於區間加操作,我們也把他操作地序列裂開,能方便好寫非常多

暫無**

聯合省選 2021 題解

把所有數不管正面反面扔到乙個序列中排序,保留哪些數不好考慮,但是刪掉一定是一段字首和字尾。被刪的數需要滿足條件 我們希望保留區間長度盡可能小,雙指標維護即可。欽定 b b 0 容易構造出不滿足值域限制的 a 現在要給每個位置加上乙個數,我們考慮如何操作才能保證四個位置的和不變,顯然四個位置的變化量分...

江蘇2021聯合省選遊記

幸好是初三來體驗一下聯合省選,某些高一學長說要是進不了隊就要退役了。周五簽到欸,可以摸掉一天文化課了。然而怎麼感覺打板子比文化課還苦逼呢。上午就乘車到南京了,在住的地方寫板子寫到下午四點乘車去南外。去的時候人好多啊,一去就看到dxm了,那djq還會遠嗎 拿完參賽證然後居然可以提前開始試機。貌似提供s...

華為BGP選路原則 神策

bgp路由最優,在沒有過濾的情況下,有兩個條件相關 下一跳可達,同步關閉。如果不滿足此兩條件,則路由不優。bgp選路原則 如果此路由的下一跳不可達,忽略此路由 preferred valnue值數值越高越優先,華為私有屬性,僅本地有意義 local preference值最高的路由優先 聚合路由優先...