2015 ACM多校訓練第一場

在下面網址看效果更佳>_<

http://mlz000.github.io/2015/08/07/2015-ACM%E5%A4%9A%E6%A0%A1%E8%AE%AD%E7%BB%83%E7%AC%AC%E4%B8%80%E5%9C%BA/

題外話

這個暑假以前就決定要把這次多校的所有題全補了,中間斷斷續續,總算把第一場的題補全了,鄙視一下頹廢的自己。。。


hdu 5288(1001) OO’s Sequence

Solution

水題,定義兩個數組L[i],R[i] 示第i個數左側和右側最接近它且值是a[i]因子的數字的位置,統計貢獻即可。由於a[i]範圍很小,因子數很小,暴力統計更新l,r即可。

Code


hdu 5289(1002) Assignment

Solution

水題,很容易想到先用st表預處理區間最大最小值,然後枚舉左端點,二分右端點檢查是否滿足即可。複雜度O(NlogN) ,也可以用單調隊列維護最值

Code


hdu 5290(1003) Bombing plan

Solution

這題比賽時候沒時間看,其實賽後發現並不是很難。看數據範圍很容易往O(NW)上去想。於是不難想到dp
定義兩個數組
f[i][j] 表示以i爲根的子樹全部破壞掉,還能向上破壞最多j的距離,需要的最少點數
g[i][j] 表示以i爲根的子樹未被全部破壞掉,且未被破壞的點距離i最遠爲j,需要的最少點數

  • (1)不取i點,則

    f[i][j]=f[son][j+1]+limin(f[l][0],f[l][1],...,f[l][j+1],g[l][0],g[l][1],...,g[l][j1])

    g[i][j]=g[son][j1]+limin(f[l][0],f[l][1],...,f[l][j],g[l][0],g[l][1],...,g[l][j1])
  • (2)取i點則
    f[i][w[i]]=1+limin(f[l][0],f[l][1],...,f[l][w[i]+1],g[l][0],g[l][1],...,g[l][w[i]1])

    很容易想到用兩個數組ff,gg 分別維護f,g 的最小值,複雜度O(NW) ,具體實現的時候注意下邊界0 的情況即可。仔細想想,轉移方程還是比較容易得到的

Code


hdu 5291(1004) Candy Distribution

Solution

考慮最暴力的dp,dp[i][j]iABj ,然後dp轉移的時候枚舉分給Ax 個,By 個,則dp[i][j+xy]+=dp[i1][j] 。考慮第i 種物品有s 個,x+ys 時可轉移,則dp[i1][j]dp[i][j] 的貢獻有s2+1 次(x=y=0...x=y=s2 ),下發現,j每變化2,貢獻-1。奇偶兩種情況考慮時,這個東西類似於等差數列,差分兩次後我們就可以完成遞推了。複雜度O(n3)

Code


hdu 5292(1005) Pocket Cube

Solution

這個題就是個找規律的題,看了題解纔會做QAQ。。。

Code


hdu 5293(1006) Tree chain problem

Solution

比賽時沒看,賽後發現是個很裸的題= =。
考慮dp,dp[i] 表示以i 爲根的子樹的最優值,則
sum[i]=json[i]dp[j]
容易想到有兩種轉移
* (1) dp[i]=sum[i]
* (2) dp[i]=value[p]+sum[k]dp[k] (plcai,k)
鏈上求和很容易想到樹鏈剖分,複雜度O(Nlog2N)

Code


hdu 5294(1007) Tricks Device

Solution

水題,最短路尋找道路邊數最少的最短路,總邊數減去最少條數爲第二個問答案。
把最短路圖抽出來建流量爲1的邊,最小割即爲第一問答案。

Code


hdu 5295(1008) Unstable

Solution


平幾題,給出中點很容易想到倍長的事情。如圖,倍長AF ,做BG 平行於AD|BG|=|AD| ,容易看出三角形FDA 和三角形FCA
不妨固定BC,A 可以通過以C 圓心,半徑長爲da ,和以B 爲圓心,半徑長爲2ef 的圓交點得到。
由於AGBC 是平行四邊形,可以得到G的座標。於是D 的座標可以通過以C 爲圓心,半徑長爲cd ,和以G 爲圓心,半徑長爲DG (即ab )的圓得到。於是可以得到A 的座標

Code


hdu 5296(1009) Annoying problem

Solution

比賽時自己蠢一直沒想出來,想過dfs序但沒細想= =
其實每次插入的時候找兩個dfs序最接近的點x,y 一個大於u 一個小於u 即可。每次增加的花費是dis[u]dis[lca(x,u)]dis[lca(y,u)]+dis[lca(x,y)] ,即爲uxy 鏈上的距離。刪除時類似。
找不到這樣的點時直接取最大和最小dfs序的兩個點即可
爲什麼這樣呢,給定固定點把它們連通得到的樹一定是固定的。這樣選點的目的是爲了不讓邊重複。

Code

hdu 5297(1010) Y sequence

Solution

這個題比賽時我寫的二分,一直T,= =非常蛋疼。賽後看題解和問別人才知道,可以迭代,迭代次數不會太多。
首先考慮反函數f(x) 表示前x 個數中Y-sequence的數量。我們迭代來算這個值,不用二分。
我們要求第n 個Y-sequence,開始令x=n ,如果f(x)=now ,那麼前x 個數中有nnow 個不是Y-sequence的數,那麼我們令x=x+nnow ,看看新的f(x) 是否等於n即可。
我們每次只加了缺少的答案數,所以不可能超過正確答案。
迭代還是玄學啊。。。。新姿勢get

Code


hdu 5298(1011) Solid Geometry Homework

Solution

比賽時以爲是大型計算幾何看都沒看,賽後發現這是個SB題,把點帶到平面和球面方程中,確定點在哪一邊把結果異或一下考慮染色即可。

Code


hdu 5299(1012) Circles Game

Solution

自己太弱,不會掃描線,賽後補了下姿勢。。
很容易想到掃描線處理圓,把圓變成樹,然後就變成了經典博弈問題樹上刪邊問題,具體可以看09年國家集訓隊論文<<組合遊戲略述——淺談SG遊戲的若干拓展及變形>>。
結論是葉子節點sg0 其餘節點sg 值爲所以孩子節點sg+1 的異或和。

Code

完結撒花!
繼續補題!>_<

發佈了86 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章