2020 08 05 集訓題目題解

2022-05-01 19:51:12 字數 2876 閱讀 6098

題目傳送門

給出乙個長度為\(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 次查詢之內得到整...