4月訓練題解合集

2022-03-25 17:17:12 字數 4823 閱讀 6290

由於我太懶了,所以就不每題開一篇寫了。題目大意也懶得寫了。

顯然最優策略是瞎走,在知道那條邊斷掉了之後才走最短路徑。

先把以 \(t\) 為根的最短路樹求出來,然後可以用堆求出斷掉每條邊後端點到 \(t\) 的最短路徑。

最後像 dijk 那樣 dp 一下就好了。

直接線段樹 + 凸包優化 dp 可以輕鬆做到 \(o(n\log n)\)

用 這個方法 可以優化到 \(o(n)\)

不同的環長只有 \(o(\sqrt n)\) 種。

對每種環長算一下答案即可。

直接縮個點然後每個出度為 \(0\) 的連通塊扔掉最小值即可。

用 這個東西,用平衡樹維護序列即可。

如果可以修改乙個 \(a_i\) 滿足 \(\forall i,a_a_i+c_i\),那麼那乙個人第一天就會發現。

如果可以修改兩個,那麼那兩個人第二天都會發現。

現在就是要修改最少的 \(a_i\) 滿足上面那個東西。

可以 dp。列舉上乙個沒有修改的 \(j\),那麼要求 \([a_i-b_,a_i-c_]\subseteq[a_j-b_,a_j-c_]\)。其中 \(b,c\) 分別是 \(b,c\) 的字首和。

可以發現區間長度是單調的。

然後按 \(a_i-b_\) 排序求個 lis 即可。

直接重鏈剖分然後在重鏈上二分是 \(o(n\log^2n)\) 的。

在重鏈上從下往上的求輕子樹的答案。

當遇到乙個輕子樹答案為 \(0\) 時,這條鏈上面的答案就都是 \(0\) 了。

這樣就只用二分下面那部分了。

複雜度應該是 \(o(n\log n)\) 的。

先二分答案 \(s\)。

弄乙個網格,把 \(a_i+b_j\leq s\) 的部分染白,剩下的部分染黑。

那麼就是你一開始在 \((1,1)\),每次找乙個同行或同列的異色的點走過去。

如果 \((1,1)\) 在所有最大匹配上,那麼先手必勝。

然後把最大匹配換成最大獨立集。

把 \(a_i,b_j\) 排序後,選的一定是 \(i\leq r,j\leq c\)的白色部分和 \(i>r,j>c\) 的黑色部分。

可以發現,當 \(r\) 變大的時候,\(c\) 變大的收益是單調的,\(c\) 也是單調的。

直接掃一遍就好了。

先讓每個點能匹配 \(k\) 條邊跑一邊網路流。

然後每次把度數 \(=\) 度數最大值得點找出來,找乙個覆蓋這些點的匹配。

重複 \(k\) 次即可。

記 \(f_\) 為長度為 \(i\),zjt 在 \(j\) 處的期望答案。

顯然 \(f_=f_=i\)

設 \(f_,f_,\ldots,f_\) 這 \(m-2\) 個未知數,每次可以通過 \(f_\) 推出 \(f_\) 的式子。

最後把 \(f_,f_,\ldots,f_\) 這 \(m-1\) 個式子拿出來消元即可。

分塊分類討論或者樹套樹都能過。

對於每乙個 \(i\leq n\),新建乙個點 \(i'\)。

連邊 \((i,i')\)

對於每一組 \((i,j)\),連邊 \((i',j)\)

答案為最大匹配 \(-n\)。

用一棵平衡樹維護當前所有最優解以及最優解的答案

每次遇到乙個新的 \(a_i\) 時,先把當前所有最優解的答案加上 \(a_i\) 的貢獻。

還有一種情況,就是最優解到 \(a_i\) 時值為 \(a_i-1\)。

那就拿之前的最優解平移一下即可。

這樣就能找到之前所有位置都做了最優操作的解(如果不是最優操作,就不會成為最大值)。

可以發現,最優解的 \(c\) 一定是 \(p-w_i-1\) 或 \(t\)。

把這些值拿出來每個二分答案 dp 一下就是 \(o(n^2(-\log \epsilon))\) 的了。

這個做法的瓶頸在於二分答案。

但是我們可以把這些 \(c\) 值 shuffle 一下,每次遇到乙個 \(c\) 就 \(o(n)\) 判斷答案是否大於上乙個,大了再二分,這樣就只用求 \(o(\log n)\) 次答案了。

複雜度是 \(o(n^2+n\log n(-\log \epsilon))\)

可以發現,\(f(a_1,a_2,\ldots,a_n)=2^(a_1\or a_2\or\cdots\or a_n)\)

然後 \(n>2\) 的答案和 \(n=2\) 的答案是相同的。

然後人類智慧型手玩一下就好了。

按顏色的出現次數分塊分類討論就好了。

答案肯定是某乙個 \(a_i\) 再乘上其他的 \(b_i\) 再加起來的形式。

列舉 \(a_i\),那麼假設其他的 \(b_i\) 選了 \(k\) 個,那麼貢獻就是 \([x^k]\prod_((1-b_i)+b_ix)\),對應的方案數就是 \(\frac\binom\)。

顯然可以分制 ntt。

把這些加起來之後除以 \(n!\) 就是答案了。

列舉 \(i\),計算選的數都是 \(i\) 的倍數的答案。

設值域為 \(m\)。

先計算可以重複選的方案數。

弄乙個閾值 \(s\),\(i\leq s\) 時直接 fwt,複雜度為 \(o(m\log m)\),\(i>s\) 時直接暴力 meet in the middle,複雜度為 \(o((\frac)^2)\)

然後容斥一下就好了。

取 \(s=\sqrt}\) 時有最優複雜度 \(o(m\sqrt)\)

考慮種了 \(i\) 棵不同的樹後沒有結束的概率。設 \(x_i\) 為 第 \(i\) 棵樹到下一棵的距離。隨便欽定一棵樹為第一棵。

結束了的情況數是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq 2)\) 的解數,為 \(\binom\)。

總的情況數顯然是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq n)\) 的解數,為 \(\binom\)。

需要期望 \(\frac\) 步才能種下第 \(i+1\) 棵不同的樹。

所以答案就是 \(\sum_^\frac(1-\frac}})\)

考慮計算逃不出去的概率。

記 \(l=\frac\) 為半圓佔可選區域的比例。

概率就是在乙個長度為 \(1\) 的環上,隨機選 \(n-1\) 個點,使得存在兩個點之間的距離 \(>l\) 的概率。

那麼可以欽定乙個很小區域裡面有至少乙個點,右邊 \(l\) 的部分沒有點。

答案就是

\[\begin

&1-\frac(}-})\\

=&1-(\frac}x}x^)|_\\

=&1-(n-1)(1-l)^\\

=&1-(n-1)(\frac)^

\end

\]前幾天剛剛做過一道基本上一樣的題。

不寫了。

假設不考慮拿完的影響,算出第乙個人在每個時刻的石子數 \(s_i\)。

記兩個人的石子總和為 \(s=x+y\)。

對於乙個區間,如果右半部分的 \(\max s_i-\min s_i\) 也就是極差 \(\geq s\),說明左半部分是沒有用的,因為到右邊還是會取完。

否則可以輕鬆地根據左半部分的答案和右半部分的 \(\min,\max\) 計算出整個區間的答案。

直接狀壓 dp 即可。

先差分一下

那麼每次就是選兩個差為奇質數的位置,把這兩個點的值都取反。

如果兩個位置的差是奇質數,只用一次就可以把這兩個位置處理掉。

如果兩個位置的差是偶數,只用兩次就可以把這兩個位置處理掉。

剩下的情況只用三次就可以處理掉。

跑乙個二分圖最大匹配即可。

用一行的未知數表示剩下其他位置,然後高斯消元即可。

時間複雜度:\(o(m^3)\)

先按時間分值把刪除去掉。

對於乙個詢問 \((x,y)\),把橫座標 \(\leq x\) 的點的凸包求出來,那麼答案顯然在凸包上。

暴力二分的複雜度是 \(o(n\log^2n)\) 的。

注意到這題只用求答案的最小值。

那麼如果凸包最下面兩個點連成的直線的斜率 \(\leq ans\),那麼最下面那個點很明顯是沒用的。

這樣不斷刪點就可以不用二分了。

複雜度是 \(o(n\log n)\)

考慮對每個字串分開計算答案。

那麼就需要處理兩個操作:

1.在這個字串後面加上乙個字串

2.查詢當前字串在 \(s\) 中的出現次數。

把修改操作加上的字串記作 \(t\)。

把 \(s\) 和 \(t\) 放在一起建 sa。

維護當前符合要求的字串的 rk 範圍,每次加字串就在這個範圍內二分即可。

複雜度是 \(o(n+q\log n)\)

不同的線段樹區間長度可能只有 \(o(\log n)\) 種

就你每一層的長度都是相鄰兩個整數,然後下一層的也是。

可以列出dp方程:

\[f_i=\sum_^i[b_=0]f_(i-j+1)^2\\

=\sum_^[b_=0]f_(i-j)^2\\

=\sum_^[b_=0]f_(i^2-2ij+j^2)\\

\]分開維護

\[s2=\sum_j (i-j)^2f_j\\

s1=\sum_j (i-j)f_j\\

s0=\sum f_j

\]然後每次轉移的時候

\[s2'=s2+2s1+s0+s2\\

s1'=s1+s0+s2\\

s0'=s0+s2

\]這樣就好了。

然後這些矩陣都是可以求逆。

預處理一下就好了

\[\sum_^n\sum_^n\varphi(ij)dist(i,j)\\

=\sum_d\frac\sum_\varphi(i)\varphi(j)dist(i,j)

\]

5月4日NOIP訓練

此次共五道題,前兩道水題不再多講 雖說後面3道也就普及左右難度233 先是較簡單的t4,本題題意是,給定一棵最多 10000 個結點的樹,以及最多 100000 個詢問。對於每個詢問中要查詢的兩個結點,輸出它們之間路徑上的中點 特別地,如果這個中點在某條邊上,則輸出這條邊的兩個端點。注意這裡說的路徑...

筆試合集4

1 時間戳轉時間軸 var str 1594031855361 var regexp d 1,2 console.log new date parseint str 1000 tolocaledatestring replace regexp,var time newdate str console...

2023年4月11日 4月13日訓練總結

今天的18浙江省在的題做的感覺不真實,分析一下吧。今天我的狀態還算不錯,有些題巧解出來了,很迷,因為都不是什麼 方面的知識,感覺都是思維題,甚至還有一道只要你讀懂題,就能ac的,感覺很不真實,今天的成績,說一下我們的問題,我們用了三颱電腦,這是不對的,但是還是感覺克制不住,但今天這樣的狀態我們以後就...