題目傳送門
給出乙個長度為\(n\)的數列\(a_\),有\(m\)次操作,每次操作分別為以下兩種:
\(n,m\le 5\times 10^4\)
其實我們可以發現乙個事情,最後:
\[c^ \bmod \varphi(1)+\varphi(1)}}\bmod \varphi(p)+\varphi(p)}
\]然後我們就發現到了一定程度之後再加上\(c\)都不會產生影響了。然後這個極限其實是\(\log p\)級別的(\(p\gets \varphi(p)\)),我們可以預處理一下,然後用線段樹維護答案就好了,時間複雜度\(\theta((n+m)\log n\log^2 p)\)。
然後如果我們用一下光速冪,就可以做到\(\theta((n+m)\log n\log p)\)了。
**戳這裡開啟
題目傳送門
給出乙個長度為\(n\)的序列,上面有\(m\)個標記位置,我們需要在上面放正方形,並且邊長為整數,正方形的邊界不能是標記位置。問有多少種合法方案數。
\(n\le 10^9,m\le 10^5\)
首先我們可以想到乙個\(\theta(n^2)\)的dp做法,我們可以設\(f_i\)表示到點\(i\)的方案數,可以得到轉移式:
\[f_u=\sum_}^f_v(u-v)^2
\]但是這個做法根本沒有辦法優化到\(\theta(n)\)。我們考慮組合意義。我們可以把問題轉換成:有\(n\)個位置,在\(n+1\)個位置裡插板,有\(m\)個位置不能插板,並且兩個板子之間方放且僅放兩個不同顏色小球的方案數。那我們又可以考慮dp了。我們可以設\(dp_\)表示當前段放了\(0/1/2\)個小球的方案數,為了方便,我們在放\(1\)個小球的時候不考慮差別,在\(2\)個小球的時候考慮。
可以得到轉移式:
\[dp_\gets dp_
\]\[dp_\gets dp_+dp_
\]\[dp_\gets dp_+2dp_+dp_
\]\[dp_\gets dp_
\]\[dp_\gets dp_
\]\[dp_\gets dp_
\]然後我們就發現我們可以使用矩陣加速了,大概長成這個樣子:
\[\begin2&2&1\\1&1&1\\1&0&1\end\begindp_\\dp_\\dp_\end=\begindp_\\dp_\\dp_\end
\]\[\begin1&2&1\\0&1&1\\0&0&1\end\begindp_\\dp_\\dp_\end=\begindp_\\dp_\\dp_\end
\]於是,我們就可以在\(\theta(m\log n)\)的時間複雜度解決這個問題。
**戳這裡開啟
題目傳送門
給出\(n,k\),求出\(0\le b\le a\le n\)的\(\dbinom\)前\(k\)大值的和。保證合法。答案對\(10^9+7\)取模。
\(n\le 10^6,k\le 10^5\)
其實和海上鋼琴師那道題挺像的。我們可以直接建乙個優先佇列,對於每乙個\(a\)裝進組合數最大的且沒有計算過的答案,然後搞一下就好了。但是不能取模的話我們就得取\(\ln\)來判斷兩個組合數之間的大小,不過這道題並沒有卡精度,所以也不是很麻煩,具體見**。
**戳這裡開啟
題目傳送門
給出乙個長度為\(n\)的\(a_\)問有多少種選取方法使得選出來的數兩兩相乘都不是立方數。
\(n\le 10^5,a_i\le 10^\)
首先不難想到先把立方因子刪去,然後我們發現如果我們去重了的話,與乙個數相乘構成立方數的數其實是唯一的,然後我們兩個數之間顯然只能選乙個數,我們就可以貪心一下選出現次數多的那個。
乙個小問題就是我們如何快速求出與乙個數匹配的,不難想到的是,對於小於等於\(\sqrt[3]\)的質因數我們可以爆枚,其餘部分我們判斷一下是不是完全平方數即可。具體見**。
**戳這裡開啟
題目傳送門
\(n\le 500\)
你給我說\(3200\)的題是紫題?
這個題確實很妙,如果你想不到的話你可能一分都得不到。我們可以考慮對乙個狀態建構函式\(f(s)=\sum_^(2^-1)\),其中\(t_i\)表示附屬於\(i\)的公司的個數。
我們考慮當公司之間發生吞併的時候該函式的變化。假設是分別有\(p,q\)個附屬公司的兩個公司之間發生的合併,可以得到:
\[\delta=\dfrac((2^-1)-(2^p-1)-(2^q-1))+\dfrac((2^-1)-(2^p-1)-(2^q-1))=1
\]然後我們就發現答案其實就是目標狀態的\(f(s)\)減去初始狀態的\(f(s)\)。。。
時間複雜度\(\theta(n)\),所以這個\(n\le 500\)其實就是拿來迷惑人的。。。
**戳這裡開啟
題目傳送門
不難想到乙個\(\theta(n\times m)\)的dp做法,我們可以設\(f_\)表示還剩\(i\)個yes,\(j\)個no的最大期望猜對次數。可以得到轉移式:
\[f_=\dfracf_+\dfracf_+\dfrac
\]應該很好理解,這裡就不解釋了。
但是我們發現這個式子其實根本沒有辦法進行優化了,所以只能捨棄掉。
我們重新考慮,可以想到的是,我們一定可以猜中\(\max(n,m)\)次,如果我們把猜yes想做往下走,猜no想做往左走,從\((n,m)\)出發,那麼多餘的答案就是我們經過\(y=x\)這條直線的期望次數乘上\(\dfrac\)(此時才tes或no都是\(\dfrac\)的概率猜對),可以得到答案就是:
\[\frac\dfrac^ \binom\binom}}
\]於是,我們就可以在\(\theta(n)\)的時間複雜度內解決這個問題了。
**戳這裡開啟
2020 08 18 集訓題目題解
講數字dp,然後發現自己學暴了,這裡挑幾道有意思的題目記錄一下,以免將來死得太慘。題目傳送門 定義 windy 數為滿足相鄰兩位差值 le 2 的數,給出 l,r 求出 l,r 內有多少 windy 數。l,r le 2 times 10 9 我 這樣乙個板子題調了乙個小時,果然是我自己菜爆了。我們...
2022 02 06 集訓題解
不難注意到的是,我們假設 f i 為 i 之前 le a i 的值的個數,那麼我們需要滿足 sum i f i sum i min i,a i 又因為我們可以知道 f i le min i,a i 所以我們對於每乙個 i 都有 f i min i,a i 考慮如何構造這樣的 a 可以發現,我們選了乙...
2022 04 04 集訓題解
小 w 的手上有一顆 n 個節點的二叉搜尋樹,裡面有從 1 到 n 這 n 個數字。二叉搜尋樹即為中序遍歷恰好為 1 到 n 的二叉樹 現在你想知道這棵樹的形態。但是小 w 不會直接告訴你,只允許你詢問以某個點為根的子樹是否恰好包含 l,r 中的所有點。你需要在 2 times n 次查詢之內得到整...