因爲我太懶了,因此就不每題開一篇寫了。題目大意也懶得寫了。html
顯然最優策略是瞎走,在知道那條邊斷掉了以後才走最短路徑。後端
先把以 \(T\) 爲根的最短路樹求出來,而後能夠用堆求出斷掉每條邊後端點到 \(T\) 的最短路徑。網絡
最後像 dijk 那樣 DP 一下就行了。優化
直接線段樹 + 凸包優化 DP 能夠輕鬆作到 \(O(n\log n)\)spa
用 這個方法 能夠優化到 \(O(n)\)htm
不一樣的環長只有 \(O(\sqrt n)\) 種。blog
對每種環長算一下答案便可。排序
直接縮個點而後每一個出度爲 \(0\) 的連通塊扔掉最小值便可。ci
用 這個東西,用平衡樹維護序列便可。字符串
若是能夠修改一個 \(a_i\) 知足 \(\forall i,a_{i+1}<a_i+b_i \or a_{i+1}>a_i+c_i\),那麼那一我的第一天就會發現。
若是能夠修改兩個,那麼那兩我的次日都會發現。
如今就是要修改最少的 \(a_i\) 知足上面那個東西。
能夠 DP。枚舉上一個沒有修改的 \(j\),那麼要求 \([a_i-B_{i-1},a_i-C_{i-1}]\subseteq[a_j-B_{j-1},a_j-C_{j-1}]\)。其中 \(B,C\) 分別是 \(b,c\) 的前綴和。
能夠發現區間長度是單調的。
而後按 \(a_i-B_{i-1}\) 排序求個 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,j}\) 爲長度爲 \(i\),zjt 在 \(j\) 處的指望答案。
顯然 \(f_{i,1}=f_{i,i}=i\)
設 \(f_{3,2},f_{4,2},\ldots,f_{m,2}\) 這 \(m-2\) 個未知數,每次能夠經過 \(f_{i,j}\) 推出 \(f_{i+1,j+1}\) 的式子。
最後把 \(f_{m,2},f_{m,3},\ldots,f_{m,m-1}\) 這 \(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^{n-1}(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_{j\neq i}((1-B_i)+B_ix)\),對應的方案數就是 \(\frac{1}{k+1}\binom{n}{k+1}\)。
顯然能夠分制 NTT。
把這些加起來以後除以 \(n!\) 就是答案了。
枚舉 \(i\),計算選的數都是 \(i\) 的倍數的答案。
設值域爲 \(m\)。
先計算能夠重複選的方案數。
弄一個閾值 \(S\),\(i\leq S\) 時直接 FWT,複雜度爲 \(O(m\log m)\),\(i>S\) 時直接暴力 meet in the middle,複雜度爲 \(O((\frac{m}{i})^2)\)
而後容斥一下就行了。
取 \(S=\sqrt{\frac{m}{\log m}}\) 時有最優複雜度 \(O(m\sqrt{m\log m})\)
考慮種了 \(i\) 棵不一樣的樹後沒有結束的機率。設 \(x_i\) 爲 第 \(i\) 棵樹到下一棵的距離。隨便欽定一棵樹爲第一棵。
結束了的狀況數是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq 2)\) 的解數,爲 \(\binom{i}{n-i}\)。
總的狀況數顯然是 \(x_1+x_2+\cdots+x_k=n(1\leq x_i\leq n)\) 的解數,爲 \(\binom{n-1}{i-1}\)。
須要指望 \(\frac{n}{n-i}\) 步才能種下第 \(i+1\) 棵不一樣的樹。
因此答案就是 \(\sum_{i=0}^{n-1}\frac{n}{n-i}(1-\frac{\binom{i}{n-i}}{\binom{n-1}{i-1}})\)
考慮計算逃不出去的機率。
記 \(l=\frac{180^\circ}{360^\circ-\theta}\) 爲半圓佔可選區域的比例。
機率就是在一個長度爲 \(1\) 的環上,隨機選 \(n-1\) 個點,使得存在兩個點之間的距離 \(>l\) 的機率。
那麼能夠欽定一個很小區域裏面有至少一個點,右邊 \(l\) 的部分沒有點。
答案就是
\[ \begin{align} &1-\frac{1}{h}({(1-l)^{n-1}}-{(1-l-h)^{n-1}})\\ =&1-(\frac{\mathrm{d}}{\mathrm{d}x}x^{n-1})|_{1-l}\\ =&1-(n-1)(1-l)^{n-2}\\ =&1-(n-1)(\frac{180^\circ-\theta}{360^\circ-\theta})^{n-2} \end{align} \]
前幾天剛剛作過一道基本上同樣的題。
不寫了。
假設不考慮拿完的影響,算出第一我的在每一個時刻的石子數 \(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_{j=l}^i[b_{j-1}=0]f_{j-1}(i-j+1)^2\\ =\sum_{j=l-1}^{r-1}[b_{j}=0]f_{j}(i-j)^2\\ =\sum_{j=l-1}^{r-1}[b_{j}=0]f_{j}(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_{i=1}^n\sum_{j=1}^n\varphi(ij)dist(i,j)\\ =\sum_d\frac{\lvert\mu(i)\rvert}{\varphi(i)}\sum_{d\mid i,d\mid j}\varphi(i)\varphi(j)dist(i,j) \]