2.16模拟总结
前言
期望:100+70+0=170
實際:40+0+0=40
rnk14
分全部掛沒了,太行了。
T1不開longlong見祖宗,而且KH說的那個也有道理,帶權之后樹的重心可以不只有兩個,所以最后還應該倍增的跳。(然而這個地方題解似乎都忽略了)
T2線性篩寫掛身敗名裂。
T3根本沒摸,本來還打算至少敲個暴力來著,但被T2心態搞炸了。
題目解析
樹的核心(core)
我、kH、pdf一邊一個做法的一道題。
但是必須承認pdf的做法實現是最簡單的。
我這個題的做法倒是出的很快,差不多8:30就出思路了。
我的做法是找到當前加一的部分的重心,新重心一定在舊重心和原來這個重心的路徑上。
代碼實現的很不好,寫拍調整到十點。
pdf思路:答案的子樹權值大小必然嚴格大于總權值一半,那么在dfs序的線段樹上按照點權二分,找到權值中點對應的結點,其必然在答案的子樹內,也就是說,答案必然在該結點的返祖鏈上。
往上倍增的找即可。
隨機填數(random)
寫完T1看這題。
是我之前做過的一道CF的多測板。
按照CF的做法有70。
一方面給了我方便,也某種程度上限制了我的思維罷。
但這題我也確實做不出來,需要的那個技巧根本就不在我腦子的“寄存器”里,估計很難訪問到了。
一個重要結論:
E(x)=∑i=1P(x≥i)E(x)=\sum_{i=1}P(x\ge i)E(x)=i=1∑?P(x≥i)
較為顯然,之前也見到過,但沒有特別上心。
然而,本題后面這個概率卻能很方便的求出。
首先分母很好辦,就是 mi?1m^{i-1}mi?1。x≥ix\ge ix≥i 也就等價于 [1,i?1][1,i-1][1,i?1] 的序列的 gcd?\gcdgcd 大于1(只考慮 i>1i>1i>1)。那么我們考慮補集,也就是 gcd?=1\gcd=1gcd=1 的序列有多少個:
∑a1...i?1[(a1,a2,...,ai?1)=1]\sum_{a_{1...i-1}}[(a_1,a_2,...,a_{i-1})=1]a1...i?1?∑?[(a1?,a2?,...,ai?1?)=1]
=∑a1...i?1∑d∣(a1,a2,...,ai?1)μ(d)=\sum_{a_{1...i-1}}\sum_{d|(a_1,a_2,...,a_{i-1})}\mu(d)=a1...i?1?∑?d∣(a1?,a2?,...,ai?1?)∑?μ(d)
=∑d=1mμ(d)?md?i?1=\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i-1}=d=1∑m?μ(d)?dm??i?1
那么我們其實就是求:
∑i=2∞P(x≥i)+1\sum_{i=2}^{\infty}P(x\ge i)+1i=2∑∞?P(x≥i)+1
=∑i=2∞mi?1?∑d=1mμ(d)?md?i?1mi?1+1=\sum_{i=2}^{\infty}\frac{m^{i-1}-\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i-1}}{m^{i-1}}+1=i=2∑∞?mi?1mi?1?∑d=1m?μ(d)?dm??i?1?+1
=∑i=1∞mi?∑d=1mμ(d)?md?imi+1=\sum_{i=1}^{\infty}\frac{m^i-\sum_{d=1}^m\mu(d)\lfloor\frac m d \rfloor^{i}}{m^i}+1=i=1∑∞?mimi?∑d=1m?μ(d)?dm??i?+1
=1?∑i=1∞∑d=2mμ(d)?md?imi=1-\sum_{i=1}^{\infty}\frac{\sum_{d=2}^m\mu(d)\lfloor\frac m d \rfloor^{i}}{m^i}=1?i=1∑∞?mi∑d=2m?μ(d)?dm??i?
=1?∑d=1mμ(d)∑i=1∞?md?imi=1-\sum_{d=1}^m\mu(d)\sum_{i=1}^{\infty}\frac{\lfloor\frac m d \rfloor^{i}}{m^i}=1?d=1∑m?μ(d)i=1∑∞?mi?dm??i?
=1?∑d=1mμ(d)?md?m??md?=1-\sum_{d=1}^m\mu(d)\frac{\lfloor\frac m d \rfloor}{m-\lfloor\frac m d \rfloor}=1?d=1∑m?μ(d)m??dm???dm???
預處理 μ\muμ 的前綴和,整除分塊即可做到單次 O(n)O(\sqrt n)O(n?)。
等權劃分(value)
由于本次考試上來就對T1有了思路,調完T1又一直在T2掙扎,所以這個題幾乎沒有摸。
因而談不太上考場感受,但是看題解感覺我應該是做不出來的。
三個關鍵點,我的評價分別是:很難想到,很難想到,很難想到。
畢竟做題可是且運算,卡一個地方這題就沒了。
由于字典序優秀的貪心性質,我們可以每次都盡可能的嘗試填A,然后判斷接下來的局面是否有解。
那么問題就轉化為了對于一個局面,如何快速判斷有無解。
關鍵性質:如果一個局面有解,那么必然可以構造一種合法方案,使得一個序列中的合法點都是完整原序列的前綴最大值(其必然也所在序列的合法點,以下簡稱必大點)。
證明:如果一個序列存在非必大點的合法點,那么其前方第一個必大點必然在另一個序列里。那么若兩個序列都存在非必大點的合法點,令兩個對應的必大點互換位置,即可保證合法點數都減一的同時,使非必大點個消失一個。不斷如此操作,至少有一個序列的合法點全是必大點。
(個人感覺證明倒不是特別難,但真的很難獨立猜出這種鬼馬結論并認為它有用…)
我們強制令一個序列全是必大點(注意這個序列即可以是A,也可以是B,下面假設其為B)。若后邊還有 ccc 個必大點,A選的合法點中必大點和非必大點分別有 p,qp,qp,q 個,A、B當前選的合法點有 fa,fbfa,fbfa,fb 個,那么就有:
fa+p+q=fb+c?pfa+p+q=fb+c-pfa+p+q=fb+c?p
整理得:
2p+q=fb?fa+c2p+q=fb-fa+c2p+q=fb?fa+c
其中右邊的東西對于某個確定局面為定值,設其為 www。令A序列選取必大點為合法點的價值為2,非必大點的價值是1,那么就要求存在一種選點方案使得總權值為 www。
結論:對于一個殘局,一個子序列S可以成為A的合法點序列的充要條件是其遞增。并且可以使B序列只選取該子序列外的必大點作為合法點。
(這個pdf沒有細講,但我覺得還是需要講一下的)
證明:前綴最大值必然遞增,必要性顯然。充分性嘗試構造性證明:對于一個遞增子序列S,從前往后考慮每個元素劃分到哪里。對于一個屬于S的元素,直接給A,否則,若是必大點,直接給B,否則,其前面必然存在比它大的元素x,把當前元素劃分到x所在的序列即可。
又注意到,由于元素只有1或2,那么如果權值x是合法的,那么x-2必然也是合法的。所以我們只需要對奇權值和偶權值分別從后往前做一遍帶權LIS并互相轉移,每次在 www 奇偶性對應的線段樹上查詢是否不小于 www 即可。
總結
- 上一篇: Redmi K70系列领衔 谁才是300
- 下一篇: 2.17模拟总结