a. 多邊形
因為本題保證了 \(n\) 不為偶數,所以 \(n\) 沒有 \(\frac\) 這個迴圈節。
然後考慮 \(\frac\) 這個迴圈節,如果能形成銳角一定有 \(m=3\)。
如果存在更小的迴圈節,那麼一定不存在銳角了。
所以盡量特殊處理一下 \(m=3\) 這個情況,然後對於 \(ans_0\),用全集-補集去求。
對於其他的情況,可以考慮求出迴圈同構意義下合法的邊長排列有多少個,給這個玩意乘 \(n\) 就是答案。
這個玩意的求法可以是容斥,大概的思想就是如果存在相鄰的兩個邊長之和 \(>\frac\) 那麼存在乙個銳角。
如果有這個事情,就是說 \(x_ \geq \max(0,\frac-x_i-1)+1\)。
然後分類討論這樣的 \(x_i < \frac\) 或 \(\geq \frac\),可以附加乙個權值或者刪去乙個點之類的,大概噁心一下就能出來了。
b. 仙人掌
大神的做法是這樣的,考慮每個節點兒子集合中,不同取值的個數。
可以發現這個玩意最多只能達到 \(\sqrt\) 級別。
原因是,如果要影響到這個兒子 \(son[x]\) 的權值:
要麼操作當前節點 \(x\),對 \(son[x]\) 的取值個數不產生影響。
要麼操作 \(son[son[x]]\),那麼一次操作只會對單個 \(son[x]\) 產生影響。
這樣的話隨便維護一下不同的取值個數就好了。比較麻煩的是還得考慮父親方向的權值。
其實對於節點 \(x\) 造成影響的只有 \(f[x]\) 和 \(son[x]\)。
對於前者,只要每次操作更新父節點,對於後者,維護每個節點對每個兒子產生共同的影響即可。
正解是用 \(trie\) 樹維護兒子集合的異或和,利用的大概就是 \(x \oplus x+1=2^-1\) 這個性質。
從低位到高位建這棵樹,然後每次只要交換左右兒子,遞迴考慮 \(x\) 的這一位仍然是 \(1\) 就好了。
c. 多項式
設前 \(n\) 項的的權值總和為 \(x\),考慮後 \(m-n\) 項。
為了方便計算,新加一項來將至多為 \(s\) 轉化為恰好為 \(s\),可以得到方案數 \(\binom\)。
然後用第一類斯特林數通常冪展開下降冪,來把這個組合數展開。
接著用二項式定理把 \((s-x)^i\) 展開成 \(x^i\) 的形式,然後對於前 \(n\) 項,可以直接用二項式定理倍增求出 \(x^i\) 的總和。
省選模擬96
容易發現當 k 3 時無解。然後容易證明當 k 3 時,只有 m 3 才是有解的。然後直接做不好做,考慮欽定然後容斥出合法方案。對於 k 3 列舉乙個點,然後計算另乙個的方案數。其他情況類似,欽定滿足條件的角,然後容斥。然後對於每乙個 o n 的式子用組合恒等式大力化簡就可以做到 o 1 了。考慮每...
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...