最近發現的一些trick(naive) & 學車膜你賽題解
大鴿子更博了!
ARC093F Dark Horse
有 \(2^n\) 個人,每次相鄰比試,比試到只剩一人。\(x<y\) 時 \(x\) 獲勝。\(1\) 選手想獲勝,但它會輸給其中 \(m\) 個選手。求初始序列的方案數。
\(n,m\le 16\)
一道狀壓 \(dp\) + 容斥原理的好題。
(居然是自己想出來的)
\(f_{i,j}\) 表示給定選手 \(i\sim m\) 決定是否強制為集合的最小值時,集合大小 \(2^0,2^1,...,2^{n-1}\) 選擇的情況。
小 trick: 計數中對組合意義的轉化
有些題目在模很小的質數,如 \(2\) 時,挖掘特殊性質
給定一個無向連通圖 \(G\),問其誘導子圖連通的方案數,對 \(2\) 取模。
\(n\le 50,1\le |a-b|\le 12\)
注意到一個圖,有 \(k\) 個連通塊,那么它黑白染色的方案數為 \(2^k\)。
我們先求子圖黑白染色的方案數,因為連通塊 \(\ge 2\) 時須忽略,故對 \(4\) 取模除二即為答案。
狀態就很簡單了:黑色,白色,不選。時間 \(O(n3^{12})\)。其實 \(n^23^{12}\) 也跑得過去。。。
對於 \(\prod_{i=1}^k a_i\) 時組合意義的轉化
相當於在 \(k\) 個集合中,每個集合大小為 \(a_i\),各選一個的方案數。
比如 神佬來切切吧
\(\text{WC2019}\) 數樹更是結合了 \(\text{prufer}\) 序列的推論:\(k\) 個連通塊,\(\sum_{i=1}^{k}a_i=n\),方案數為 \(n^{k-2}\prod_{i=1}^{k}a_i\)。
真是一道不可多得的好題!
突然發現學車送了三套題,質量還可以。其中一套沒 latex 所以沒做。
prime
min25 篩模板,隨便做。
tree
這么好的題目居然沒人做 QAQ
求 \(\sum_{y\in S}dis(x,y)\),先建個虛樹,在虛樹上換根 dp,處理出每個點子樹和子樹反樹的 \(\sum dis^2,\sum dis,\sum 1\),這樣就可以合並了。
因為 \(z>0\),所以答案點一定在虛樹一條鏈上。我們設 \((a,b,c)_{1,2}\) 分別為子樹和子樹反樹的 \(\sum dis^2,\sum dis,\sum 1\)。
根據初中數學知識,\(x\) 越接近 \(-\frac {b}{2a}\) 二次函數越小,這樣的話我們倍增上去,找到一個點,恰好使得 \(dis_{x\rightarrow z}\le \Large\frac {vc_2+b_2-b_1}{c_1+c_2}\),這樣計算一下 \(z\) 和 \(fa_z\) 的答案就行了。
另外就是,倍增上去的時候,若 \(-\frac {b}{2a}\) 下取整 \(=0\) 也是在范圍內的。因為有可能是 \(-\frac {b}{2a}=0.80\),答案在 \(fa_x\)。若不在 \([0,v)\) 的范圍內,最小的答案肯定在虛樹上的點。
時間 \(O(\sum k\log n)\),我認為這是道好題。
triangle
我們把所有點和直線的交點拿去離散化,跑掃描線。這樣區域就變成了一些梯形和三角形,且過一個區域的直線不相交。因為若相交,掃描線時會分成兩個區域。
這樣子你把直線拿去離散化,有兩條直線的話相當於在上面區間加,單點查。若一塊區域被覆蓋 \(k\) 次,它的貢獻為 \(S\times (2^k-1)\times 2^{n-k}\)。時間 \(O(n^3\log n)\)。
inv
md,隨機居然是這么用的,233
類似 k-d tree 查詢最近/遠點對,復雜度大概是 \(O(n\sqrt{a}\log n)\)。
perm
一眼秒了,只是沒看出有更簡單的做法。
\(f_i\) 是 \(i\) 個點正好連成大小為 \(i\) 的環的方案數。長度在集合之內就是把一些數設成 \(0\),不用管它。答案為 \(ans_t=t!\times [x^t]e^f\)。
然后我就直接分治 FFT 了。。。
一看別人寫的,cnm,這么簡單。。。有一個結論:\(f_i=(i-1)!\)。用數學歸納法容易得出。
接下來就是多項式 exp 的事了,時間 \(O(n\log n)\)。
dlds
碼農題。。。估計考場上我如果能寫出這題就 rp 爆表了。。。
想都不想,直接樹套樹,動態開點線段樹套fhq treap,封裝一下。雖然這題不僅卡時間還卡空間,不過 12s 即使操作 5 時間 \(O(\log^3 n)\) 其他操作時間 \(O(\log^2 n)\) 都能過吧。。。快速訪問用個 deque,碼碼碼就行了。