bzoj 題目選做

2022-02-05 06:59:39 字數 1201 閱讀 2143

1.輪狀病毒

題目是很沒意思的 列出狀態 顯然無法遞推 我簡單推了一下加動態加點的狀態 嗯發現規律沒有那麼簡單 打表 也不太能發現吧

正解顯然是 矩陣樹定理啊 然後這題咕了 以後再複習矩陣樹定理的時候再證明這個結論吧 暫時當做打表做的。

$f_n=f_n*3-f_+2$ 然後高精加和高精減即可。由於都是高精和單精之間的運算 所以還是很好寫的。

2.[noi2003 editor](

這道題還是蠻有意義的學習一下塊狀鍊錶...(這樣我就可以寫分塊第k大帶插入帶修改了哈哈

2h過後這啥玩意啊 ex到我了 沒想到細節這麼多這麼複雜 大致是了解了 改天重新了解一下...自閉中。

3.[4180字串計數](

這題鬼的很!看了一眼題解因為真覺得不太會寫這道題。

題目意思是 給出乙個字串t 每次我們可以從這個t中取出乙個子串構造出來乙個長度為n的字串 且t的字符集為

定義乙個長度為n的字串需要新增子串的次數是最小的,求所有能被構造出來長度為n的字串所花費的最大次數。

很繞 因為存在最小的最大。這個問題很難去考慮 讓人覺得無從下手 因為不知道怎麼構造是合法的是最小次數的同時怎麼求次數最大。

首先 就從最小次數出發 先構造出來t的字尾自動機,裡面存有我們想要的所有子串。然後我們從乙個能被構造出來的字串s 求出怎麼構造才是使次數最小。

顯然我們讓s在t的字尾自動機上跑 跑不動了回到原點繼續跑 在原點的次數即最小構造次數 為什麼這是最小的?顯然。自證不難。

現在我們再來考慮這個問題的模型 在字尾自動機上走n步求經過原點的次數最大。

我們顯然有dp f[i][j]表示到了節點i已經走了j步所能獲得的最大值 這個dp的複雜度是$t\cdot n$的考慮優化.

我們出發點是固定的原點所連的那幾個節點 接下來順著這幾個節點跑還是會回到這個幾個節點 不妨設f[i][j]表示 從i節點到j節點經過的邊數最小值 當然i和j 一定都是出發節點。這個topsort一下或者bfs一下都可以求出來.

於是我們發現了 剛才那個dp已經被我們轉換到了4個點之間的轉移了當然複雜度還是近乎4*n的 考慮進一步的優化我們發現這個dp的轉移是乙個線性遞推式矩陣乘法可以優化 進一步來說每乘一次轉移矩陣答案+1 還是很難求出答案 但是我們能根據答案求步數 所以二分這個答案 求出在這個答案的情況下的最小步數 從而來判定答案的大小範圍即可.

值得一提的是這樣做是log^2的 還要乘上矩陣乘法的常數...更快的做法是直接倍增答案即可以乙個log解決。

POI題目選做

給定乙個長度為 n的序列,你有一次機會選中一段連續的長度不超過 d的區間,將裡面所有數字全部修改為 0。請找到最長的一段連續區間,使得該區間內所有數字之和不超過 p。顯然長度為d時只會更優,尺取法列舉,單調佇列維護被刪除的一段 includeusing namespace std define ll...

選數 題目 1025

已知 nn 個整數 x1,x2,xnx1,x2,xn,以及乙個整數 k k n k k n 從 nn 個整數中任選 kk 個整數相加,可分別得到一系列的和。例如當 n 4,k 3n 4,k 3 4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 2...

CodeChef題目選講

關鍵點 不超過7條 根據咕咕原理,所以答案最少是n 7 n小於49就暴力 隨機化找兩個點判斷直線上的點個數,隨機500次,概率就很高了 法二 點數大於50,答案至少是8 答案一定是7條路之一 隨機找7個點,按照級角序排序,點數大於7的直線就刪去上面的點 之後random不考慮,但是實際上不能真刪除,...