原创 牛客練習賽58 F題 樹鏈剖分 + 線段樹魔改

題目傳送門 題意: 給出一顆  個結點的樹,第  個結點的權值爲  。 定義點  到點  的路徑的長度爲點  到點  的最短路徑上的所有結點的權值的異或和。 單獨一個點不算做路徑。 現在要求你維護  個操作: 總共有兩種操作,一種是把某一

原创 codeforces1304F2 dp + 單調隊列優化

題目傳送門 題意: 給你  的矩陣  。第  行你可以選擇以  爲左上角,爲右下角的子矩陣。 每行可以選擇一次。 這  個子矩陣的並集的和就是答案。輸出最大的答案。 數據範圍:  。 題解: 與F1不同的是k的範圍增大了,這樣相交的部分就

原创 P4149 點分治 + 桶

題目傳送門 題意: 給一棵  個點的樹,每條邊有權。求一條簡單路徑,權值和等於  ,且邊的數量最小。輸出最小邊的數量。 數據範圍: 。 題解: 因爲  比較小,考慮開一個桶。我這個做法把數組改成  就超時了。 桶的含義:當前子樹中, 表示

原创 codeforces1029D 2100分map

題目傳送門 題意: 給你  個數  ,讓你挑兩個數,把這兩個數拼起來,例如  和  拼起來是  。 問拼起來的數是  的倍數的方案數。認爲  和  是不同的方案。都滿足  。 數據範圍: 。 題解: 我們挑選的其實是  。 位數比較小,可

原创 P4051 後綴數組

題目傳送門 題意: 給你一個字符串,輸出加密後的字符串。 例如‘JSOI07’,可以讀作: JSOI07 SOI07J OI07JS I07JSO 07JSOI 7JSOI0 把它們按照字符串的大小排序: 07JSOI 7JSOI0 I0

原创 codeforces208E 樹上啓發式合併 + 逆向思維

題目傳送門 題意: 給你  個節點的森林,邊權都是  ,  個詢問。 詢問有多少個節點的距離是  的祖先和第  個節點的距離是  的祖先相同。 數據範圍:  。 題解: 問題轉化一下,設第  個節點的距離是  的祖先是  ,詢問  的距離

原创 codeforces900D 2100分莫比烏斯反演

題目傳送門 題意: 正整數序列  ,序列的  是  ,並且序列之和是  。 問這樣的序列個數,答案取模。 數據範圍: 。 題解: 容易發現存在這樣的序列等價於  。 簡化一下題意,這樣的序列是  是  ,並且序列之和是  。  是  ,並

原创 Libreoj6121 狀壓 + bfs

題目傳送門 題目:  的迷宮,相鄰的位置之間可能有牆、有門或者沒有限制。鑰匙的種類是  。 你最初在  這個位置。 可以上下左右移動, 你移動的方向上如果有牆,則不能在這個方向移動。 你移動的方向上如果有門,則需要有和這個門匹配的鑰匙才能

原创 codeforces401D 2000分狀壓dp + 去重

題目傳送門 題意: 給你一個數  ,你可以對這個數的位進行重排,重排後的數不含前導  且是  的倍數的方案數。 數據範圍:  。  題解: 這道題是看着數位dp的練習題刷的,發現沒法記憶化搜索。 然後是狀壓dp。 因爲最多有  位數,所以

原创 codeforces803F 2100分容斥原理 + 莫比烏斯函數

題目傳送門 題意: 給你  個數的序列  ,問你  的子序列方案數。 數據範圍:  。 題解: 的質因子個數是奇數個,且沒有相同的質因子。 的質因子個數是偶數個,且沒有相同的質因子。  表示序列中  的倍數的個數。  表示  個數形

原创 P4127 數位dp + 枚舉模數

題目傳送門 題意: 給出兩個數  ,求出  中各位數字之和能整除原數的數的個數。 數據範圍:  。 題解: 我們必須對原數取模才能轉移狀態,不然就成暴力了,而且這個模數需要等於每位數的和。 考慮枚舉模數。  表示從低位到高位的第  位。

原创 P3413 數位dp

題目傳送門 題意: 兩個非負整數  ,問  內有多少個整數滿足存在長度至少爲2的迴文子串。 數據範圍:  。 題解: 魔改數位  模板。  表示從低位到高位的第  位。  表示當前位的前  位的數。  表示當前位的前  位的數。  表示

原创 codeforces375D 樹上啓發式合併 + 線段樹

題目傳送門 題意:  個點的樹,每個點都有一個顏色  ,有  個詢問。 每次詢問:在以第  個節點爲根的子樹中,出現次數多於  次的顏色的種類數。 數據範圍:  。 題解: 首先掏出樹上啓發式合併的板子。 然後每個節點的子樹維護兩個信息:

原创 codeforces16E 2100分狀壓dp

題目傳送門 題意: 池塘裏有  條魚。 給你一個鄰接矩陣  ,  表示第  條魚和第  條魚相遇後第  條魚吃掉第  條魚的概率, 且  。 每天有且僅有兩條魚相遇。相遇保證隨機。 兩條魚相遇後必然會有一條魚被吃。 如果有至少兩條魚存在,

原创 codeforces1305F 隨機

題目傳送門 題意: 給你  個數  ,每次操作可以使一個數增加  或 減少  。操作後需要保證這個數是正數。 問你最少操作多少次使這些數的  大於  。 數據範圍:  。 題解: 我們讓每個數都變成  的倍數,上界是  。 如果有超過一半