2015 ACM多校訓練第三場

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

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

題外話

尼瑪頹廢着頹廢着就開學了= =無聊終於把第三場的題全補完了


hdu 5316(1001) Magician

Solution

線段樹裸題,維護四個東西,以奇/偶開頭奇/偶結尾的最大值,正常線段樹合併即可。

Code


hdu 5317(1002) RGCDQ

Solution

水題,發現2×3×5×7×9×11×13×17>1000000 ,所以素因子種數最多爲7個,前綴和統計一下即可

Code


hdu 5318(1003) The Goddess Of The Moon

Solution

水題,題目太長比賽沒看= =,唯一的坑是要把數字去重,然後容易看出可以用矩陣乘法來遞推

Code


hdu 5319(1004) Painter

Solution

簡單模擬題,按題目要求一刷刷到底就可以了

Code


hdu 5320(1005) Fan Li

Solution

感覺這道題是個不錯題,考慮以i 爲開頭的序列,gcd 如果發生變化一定至少除以2 ,所以不同的gcd區間最多也是log級的。可以預處理出所有的四元組(g,i,l,r) ,表示以i 爲開頭,結尾在[l,r] 區間內gcdg
考慮dp ,不妨考慮當前gcd=x 的方案數以及區間數,假設該四元組開頭爲i ,顯然區間數是以結尾在[1,i1] 區間內的最大值+1 ,方案數也很好計算。容易發現用一個線段樹就可以輕鬆維護了。

Code


hdu 5321(1006) Beautiful Set

Description

A的計算方法是:對於n 個數的某個排列,此排列的美麗值爲這個排列所有的區間最大公約數之和。然後這個集合的美麗值爲n 個數的所有排列的美麗值之和。
B的計算方法是:在n 個數中選出k(1kn) 個數,對於某種選取方案,這種方案的美麗值爲k 個數的最大公約數乘上k 。然後這個集合的美麗值爲所有選數方案的美麗值之和。

Solution

很容易想到用cnt[i] 表示集合中i 的倍數個數

  • 考慮第一個人
    F1[x] 表示gcdx 的倍數的區間的個數
    f1[x] 表示gcdx 的區間的個數
    F1[x]=x|df1[d]

F1[x]=cnt[x]j=1(cnt[x]j)×j!×(nj+1)!
cnt[x] 裏選j 個數,再把nj 個數和這j 個數算做nj+1 的排列

  • 考慮第二個人
    F2[x] 表示gcdx 的倍數的區間的個數
    f2[x] 表示gcdx 的區間的個數
    易知F2[x]=x|df2[d]

F2[x]=cnt[x]j=1(cnt[x]j)×j=cnt[x]×2cnt[x]1
這個稍微推推就能推出來

同樣的F2[x]=x|df2[d]

然後就是我們熟悉的莫比烏斯反演辣!

F(n)=n|df(d)

可以得到

f[n]=n|dμ(d/n)×F(d)

於是可以計算出ff[i]×i 即是答案

Code


hdu 5322(1007) Hope

Solution

這題其實並不難,考慮dp[i] 爲長度爲i 的排列的答案,枚舉這個排列最大值所在的位置,最大值左邊和它都是聯通的,於是我們可以得到轉移方程
dp[i]=ij=1(i1j1)×(j1)!×dp[ij]×j2

稍加變換我們可以得到

dp[i]=(i1)!×ij=1j2(ij)!×dp[ij]

k=ij 我們可以得到dp[i]=(i1)!×i1k=0(ik)2k!×dp[k]
展開得dp[i]=(i1)!×(i22ik+k2)×dp[k]k!
維護三個前綴和即可O(N)解決,當然你可以沒思維難度得想到cdq分治+NTT得做法QAQ

Code


hdu 5323(1008) Solve this interesting problem

Solution

考慮[l,r] 是做左兒子還是右兒子,具體有4 種情況,暴力枚舉即可,實際上的複雜度是411 ,完全可以接受

Code


hdu 5324(1009) Boring Class

Solution

三維最長不下降序列之類的題,很容易想到按id 算答案,r 這一維排序,l 這一維用樹狀數組維護然後cdq分治的經典做法。
考慮dp 由於要字典序最小,先cdq分治算右區間的答案,考慮對左區間的影響即可。
寫了不到80 行,輕鬆愉快,cdq分治真是個高大的姿勢。。。爽

Code


hdu 5325(1010) Crazy Bobo

Solution

水題,按權值排序後,權值小的向大的連即可,dp一下就行了

Code


hdu 5326(1011) Work

Solution

水題,隨便dfs就行了= =

Code

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

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