反思彙總(倒續更新

  有生之年系列  

csp-s模擬測試59      2019-10-04算法

又是快樂的吃*的一天數組

沒有藉口,調不出來,就是菜。函數

垃圾又頭鐵。測試

 

 A. Reverse

奇偶性質很顯然,建邊須要優化也很顯然。優化

大佬都會線段樹優化建邊,我只能用垃圾$set$,$md$我什麼腦子要左右分開跑??ui

處理出左右端點,把迭代器$++$移動。spa

這個過程在$Bfs$中作。3d

 

 


 

csp-s模擬測試58      2019-10-03blog

掛了$120$,男受。排序

沒本事的垃圾就不要作$T3$了,把**$T1$,$T2$作好就完了。(自黑 $Rp++$

$T2$沒打同一個時刻選擇不少件。

把時間離散一下就$A$了。

$T3$邊的數組沒開二倍(來自剛剛開始玩前向星的$vector$玩家的怨念……

 

 A. Divisors

  水題,過了。

 

 B. Market

  也是水題,這種揹包作過兩次了。(可是我不會$01$揹包就很難受了

  把時間離散就能夠打普通$DP$了(無腦

  還有之後不要再拿錯的數據用錯的暴力拍錯的「正解」了!!

  題比較簡單,把長龜揹包的數組下標換一下就行了。

  可是查詢須要優化。

  咱們發現對於一個時間$t$價值和代價正相關。

  因此把詢問離線,按$t$爲第一關鍵字排序,$M$爲第二關鍵字排序,根據單調性,最差複雜度爲$O(n^3)$,最優性和詢問次數無關。

 

 

 C. Dash Speed

 

  咕咕咕


 

csp-s模擬測試56      2019-10-02

其實和預估分差$8$分,T1原本能夠作掉的,可是忘了$nth$ _ $element$怎麼拼了,因此這就是我考場玩(tui)了半個小時$Qt$的緣由

$T2$打的真爽,正解挺好想的,就是暴力打錯還一直在對拍????,w tm拿正解調了半年暴力???(最後知道真相的我眼淚落下來

此次依舊放了對拍噁心身邊人。($kxkx$可是好像Moudingggggggggg心態很穩QAQ。

$T3$暴力都沒打,太菜了。。。。

 

 A. Merchant

  二分。$0$的時候特判一下。

 

 B. Equation

  修改操做其實只對那一棵子樹產生影響。

  很天然就能想到求出$dfs$序,再用樹狀數組單點查詢,區間修改維護。

  注意對兒子和孫子或者說深度奇偶產生的影響是不同的。

  我打的比較不同,我用了好多樹狀數組,對於根$1$和他的直接兒子各開一個來支持以上不一樣影響。

  還從新對深度奇偶建了新的圖跑的$dfs$序。

  具體實現的話,顯然內存很差控制。

  把樹狀數組的數組開成$vector$再$resize$就能夠保證內存了。

  其實這個題你們都應該能想到正解(可是要有耐心實現啊

 

 

 C. Rectangle

  咕咕咕

 


 

csp-s模擬測試(b)     2019-10-01

國慶信心賽,沒有反思,沒有題解。

其實仍是有一點的。

就是對拍要謹慎,否則會把身邊的同志心態搞炸。。。。

 


 

csp-s模擬測試55     2019-09-29

$T1$,$T2$都是正解,都由於沒有底氣棄掉了。

考場上$T1$把本身折磨死,一直調不出來,就打了全部部分分($woc$尚未我樹狀數組水不過的部分分

 

 A. 聯

  水題,正解很好想,由於有$xor$,因此維護最左端的$0$和$1$就行了。

  有信心有耐心$==ac$。

 

 B. 賽

  水題,枚舉公共物品的思路很顯然,考場上沒時間了只能暴力維護。

  打了一個$vis$標記,本質上是正解增增刪刪的思路,可是沒時間,最後打掛了。

  能夠用動態開點,再根據狀況刪點增點,維護前綴和和個數就行了。

 

 C. 題

  不會,待填。


 

csp-s模擬測試54     2019-09-28

$T1$正解了,$T2$的記憶化打掛了,丟了$51$,就只改了一個判斷位置,$T3$部分分也掛了,$-$打成了$+$,丟$14$。

之後要認真點啊,雖然這場感受很好,算下來仍是丟了很多。

 

 A. x

  水題,顯然若是兩個數$a$,$b$同時是一個數$x$的質因子的話,全部含有$a$或$b$的數都要放在一個集合裏。因此使用並查集。加上全是$1$的部分分提示,很天然想到$2^n-2$。

 

 B. Y

  挺好的一道題。考場的記憶化暴力能夠水到不少分。

  正解是$bitset$,$STL$玩家表示很好$van$。

  還有一個新思想(其實也不新,雙向$BFS$),$meet int the middle$。

  咱們表示一下對於某個點$x$,是否存在一個狀態$S$,能夠用$bitset$將點合併,用$meet int the middle$思路優化狀態數。

  倒序枚舉點$x$的話最後就獲得了關於$x$的存在狀態$g$,配合$f$數組能夠合併狀態。

 

 C. Z

  大概思路有了,實現起來有點困難,先咕咕咕。


 

csp-s模擬測試53    2019-09-27

 


 

csp-s模擬測試51(b) 2019-09-22

垃圾Smily都感受這b組題lj

T1  A了  T3原題(還更簡單了)   md全場22我的A的T2********的我爆零了

****T2好水啊

****T1$Lca$調倆小時

****T3開$long double?????$

 A. attack

  其實$T1$仍是很水了的,部分分的提示很明顯,就是公共$lca$,按着拓撲序加入新的樹

 


 

csp-s模擬測試50     2019-09-22


T1數組腦殘開小炸掉20,T2暴力達到標準暴力分,T3無腦$n^5$暴力拿到20(c n m 以暴力爲生

T2至今未改過來,(畢竟我是分塊控稍微抵制莫隊 可是優雅暴力一家親啊喂 據說莫隊都不用分塊的,先咕着明天改

 A. 施工

   主要是證實那個填平不會......

  $f[i]$表示考慮到$i$而且$i$這個位置高度不變的最小代價

  那麼轉移方程就很好寫了    $f[i]=\sum_{k=j+1}^{i-1}(t-h_k)^{2}+c*(h_j+h_i-2*t)+f[j]$

  可是有一個細節   答案不是$f[n]$ 你須要在左右放上一個無限高的假想柱子 最後求$f[n+1]$

  表示$i$從$j$轉移過來,咱們想什麼樣的$j$能夠轉移到$i$

  必定是$j<=i$ 而且對於任意的$j+1<=k<=i-1$ 都有$h[k]<=h[i]$  $and$  $h[k]<=h[j]$

  (顯然啊由於你要把 $i,j$ 之間的全都往上填

  咱們再想 如何維護能夠轉移的 $j$ 的集合   咱們發現若是枚舉的話會使複雜度「優化」到$O(n^2)$

  因而咱們頹完題解選擇了單調棧

  想一想爲何要用單調棧

  

  咱們維護一個單調遞減的單調棧   $l$,$j$,$k$是單調棧裏的元素(單調棧存原序列下標就好

  那麼這個單調棧的實際含義爲  在$l$,$j$之間沒有比$h[l]$,$h[j]$大的元素

  那麼意思就是你的 $l$,$j$能夠轉移給$i$

  而且當$i$入棧  它頂掉的(如本圖中的$j$,$k$)必定不會轉移給$i$後面的元素

  其實很顯然 記$i$後有一個$r$須要被更新 記轉移點爲$pos$那麼必須知足上文說的

  在$l$,$j$之間沒有比$h[l]$,$h[j]$大的元素

  在這兒也同理 在$pos$,$r$之間也不該該有比$h[pos]$,$h[r]$大的元素

  那麼咱們想 被$i$頂掉的$k$顯然不可能做爲轉移點 由於$k$和$r$之間有一個$i$使得$k$不可能做爲$pos$

  這是單調棧的優秀性和正確性(刪除了不必的轉移點,而且刪除的操做是對的

 

  單調棧維護的轉移點討論完了,咱們思考轉移

  咱們想應該怎麼轉移   以一個$j$轉移給$i$爲例

  咱們要作的 是把$j+1$到$i-1$之間的填平

  想數組含義  這必定是$j$,$i$不動  那麼就能夠代價分爲到達 $j$且$j$不動的最小代價$f[j]$和填平$j+1$到$i-1$的代價

  即轉移方程的由來     $f[i]=\sum_{k=j+1}^{i-1}(t-h_k)^{2}+c*(h_j+h_i-2*t)+f[j]$

   如今咱們要作的是求一個$t$使結果最優 顯然是一個二次函數的形式

  假設咱們擁有了二次函數的最低點對應的$t$

  咱們想即使是高考數學上你也要保證自變量$t$符合實際狀況

  那麼咱們的$t$呢

  必定要比$h[i]$,$h[j]$小 而且比$max(h[k])$,$j+1<=k<=i-1$大

  即對於求出來的最優(不必定符合實際)的$t$設限制

  顯然最後對於$h[i]$,$h[j]$取$min$,對於$max(h[k])$取$max$就好

  $h[i]$,$h[j]$已知,那$max(h[k])$呢?

  想一想單調棧 記棧頂爲$top$

  顯然$i$和$top-1$之間的最大值是$h[top]$

  因此能夠每次在彈棧前進行修改

  以$top-1$爲$j$,$h[top]$爲$max(h[k])$更新答案    而後把$top$彈走  這時咱們是不用考慮$top-1$的

  

  關於$t$的求法   就是二次函數最低點$-b/2a$

  把原始方程化爲$a*t^2+b*t+c$的形式 求出$t$ 並如上設限帶入求值就好

   $t=-\tfrac{b}{2a}=\tfrac{\sum_{k=j+1}^{i-1}h_k+c}{(i-1-j)}$

  注意邊界問題 在咱們假象的柱子上是不用付出代價的(好比你當前要轉移到$n+1$  把以前的填爲$t$ 是不須要付出$(h[n+1]-t)*c$的代價的)

 

  大致就是這樣 可是證實爲何是平的我只能YY

 


 B. 蔬菜

  我正在打莫隊

  我打完莫隊了


 

 C. 聯盟

  $O(n^5)$暴力有人聽嗎?

  我打的是錯解我非人

  首先找出直徑,若是直徑惟一的話,那條斷邊必定在直徑上選。

  由於你選擇其餘邊的話    直徑仍是作了最大的負貢獻

  好由於測試點太水咱們就快樂的選擇不打正解利用了這個性質

  (至於爲何會只有一條直徑,多是良(×)心(×)出題人的特殊數據,若是有兩條的話好像第三問就沒有意義了,意思就是他爲了防止被人水掉第三問的分而白白送了咱們$50$分  $QwQ$)

  因此咱們枚舉直徑上的邊   斷成兩坨子樹   在兩坨子樹裏求子樹直徑

  那麼對於這種斷邊狀況   它的候選答案$tmp$是$max((len_x/2+len_y/2+1),len_x,len_y)$

  而後在用$tmp$更新$ans$    $ans=min(ans,tmp)$

  想一想Dp求樹的直徑的數組定義 是否是表示到達這個節點後的最長長度?(就是$ans$一直取$max$的操做

  可是它是對於整棵樹說的   咱們要的是針對一棵子樹  不能直接搬用   $Dp$須要略改一手  再也不贅述

  因此能夠正反兩遍$dfs$   求出前綴直徑  和   後綴直徑

  再在直徑上枚舉更新答案    第一二問就快樂的作了出來

  第三問也簡單 (先咕着

  我又來更了......

  其實也沒啥了,個人$sb$算法.....

  第二問求出來能夠幹掉哪條邊,就直接從裏邊隨便拿一條,斷掉,記錄端點爲$st$和$ed$,用$st$和$ed$分別再跑樹的直徑,而後分別把以$st$和$ed$爲根的各自的直徑上的點集處理出來,再各自取點集中點輸出就好。

相關文章
相關標籤/搜索