原创 牛客練習賽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 隨機
題目傳送門 題意: 給你 個數 ,每次操作可以使一個數增加 或 減少 。操作後需要保證這個數是正數。 問你最少操作多少次使這些數的 大於 。 數據範圍: 。 題解: 我們讓每個數都變成 的倍數,上界是 。 如果有超過一半