2020北大集訓題解

2022-05-07 23:03:19 字數 3938 閱讀 2509

能聽懂的就盡力寫吧。**肯定是都咕了。

再次感謝出題人不殺之恩,給了我 89 分這個鬼畜分數。

做法(不是寫法)和正解完全一樣,然而還是不知道自己怎麼錯了。

心情好了再去看 。這題不僅被甩了 11 分還花了 3h ……

真就聯賽模擬題啊 /jk

獲得成就:上台講題。

先考慮乙個區間怎麼做。對於每個位置直接處理出 \(pre_i\) 表示往前第乙個不被包含在它的子樹內的位置,可以線段樹二分求出。然後就是乙個二維數點。

多個區間的話,相當於給這個區間加了乙個額外限制,即必須是某個點 \(l\) 的祖先。同樣先線段樹二分,得到第乙個滿足該條件的點(然而寫這句話的時候發現這好像不太好做,所以要線段樹二分出這個區間的乙個字首,使得字首的 \(lca\) (好像 \(lca\) 也不好搞,只能是關於 dfs 序的某些東西)是 \(l\) 的祖先。所以我場上寫的線段樹二分可能複雜度還是錯的???)。此時,字首的所有點都一定不滿足條件,而對於後面的點,如果子樹中能包含這個字首,自然也就能包含 \(l\) 。

線段樹上只維護 \(dfn,low\) 。複雜度 \(o((m+q)\log m)\) 。

挺有趣的一道題,可惜場上沒時間想。

稱 x-度點 表示有 \(x\) 個兒子的點。

在這檔部分分中,樹中不存在一度點。

容易發現詢問 \(v\backslash\\) 可以得到這個點是否是葉子,那麼先用 \(n\) 次操作得到此時的葉子集合。然後考慮怎麼確定葉子的父親,發現當 \(x\) 是葉子時可以詢問 \(v\backslash \\) 來確定 \(y\) 是否是 \(x\) 的父親。如果 \(fa_x=y\) 那麼會返回 \(n-2\) ,否則是 \(n-1\) 。

然後發現這個列舉 \(y\) 的過程其實可以直接二分乙個字首,就可以在 \(o(\log n)\) 的時間內得到乙個葉子的父親。發現兩個葉子的父親相同之後就可以刪掉這兩個葉子,並把它們的父親加入葉子集合。

這樣就獲得了乙個 \(o(n\log n)\) 次詢問得到樹形態的做法。

此時樹中可能存在一度點,但詢問次數更多(當然數量級沒有變)。

考慮上面的做法,會發現在第一步就直接錯了:詢問 \(v\backslash \\) 並不能區分零度點和一度點。我們先把二度點區分出來,然後考慮零度點和一度點的集合 \(s\) 。那麼詢問 \(s\backslash \\) 會有兩種取值:

容易發現如果出現 \(n-1\) 的第二種情況,那麼一定無法確定樹的形態。所以先不考慮這一種情況,求出三種點的數量 \(c_0,c_1,c_2\) 。由於真正的 \(c_0\) 應當等於 \(c_2-1\) ,所以如果不滿足這個條件就直接返回無法確定。

然後用 subtask 1 的做法先得到只考慮零度點和二度點的樹形態,然後嘗試把一度點塞進去。

然後又是乙個性質:在二叉樹中,詢問乙個點集,可以根據大小來判斷是否至少有一組 祖先-後代 關係。那麼選擇乙個葉子集合 \(l_0\) 和乙個一度點 \(x\) ,詢問 \(l_0\cup \\) 即可確定 \(x\) 的子樹中是否存在 \(l_0\) 中的葉子。如果總葉子集合是 \(l\) ,那麼詢問 \((l\backslash l_0)\cup\\) 就可以知道 \(x\) 子樹的葉子集合是否被 \(l\) 完全包含。

現在樹的基本形態已經確定了,所以可以邊分治,確定所有一度點是在這個子樹內,在外面,還是恰好在這條邊上。

出題人用神奇分析方法得到了詢問次數上界是 10408 ,不太懂怎麼做到的。

簽到題。

明天 危 ……

神奇維護分段函式,這竟然還能維護出來 /jk

顯然應該旋轉 45° ,使得橫縱座標互相獨立。

然後再稍微搞搞就得到了: \(2n\) 個隨機變數,每個變數取值 \([-,]\) ,求 \(|\sum x_i|\) 的期望。

然後掉線了。

wdnmd 為什麼這還和演算法二有關……

也掉線了。

場上做法。我也不知道為什麼它是對的,但它就是對的。

令 \(n:= 2n\) 。

設 \(s_0=0,s_i=\sum_ x_k\) ,那麼答案是 \(|s_n|\) ,有限制 \(s_i\in [s_-,s_+]\) 。

先把 \(|s_n|\) 變成 \(\max(s_n,0)\) ,然後類似 \(m=\sum_^ [i,再變成 \(\int_0^ [s_(大概不能這麼寫,但我不知道怎麼寫)。

限制有點麻煩,但是可以容斥變成 \((-\infty,s_+]-(-\infty,s_-]\) (用離散的方案數的角度很好感性理解,但是它是連續的,所以我也不知道為什麼是對的)。那麼就變成一堆 \(s_i\le s_+k\) 的限制,以及乙個 \(s_\ge 0\) 。

這個形式就非常好看,對於 \(s_i\le s_+k\) 可以給所有 \(j\ge i\) ,做 \(s_j:=s_j-k\) ,那麼做完之後就只剩下 \(s_i\le s_\) 和 \(s_\ge c\) 了,其中 \(c\) 是前面所有 \(k\) 加(減?)在一起。

容斥顯然可以變成 \(o(n)\) 列舉,就得到了答案式子:

\[\over (n+1)!}\sum_^ [2i-n\ge 0] (2i-n)^(-1)^

\](可能有一些正負寫錯了,記不清楚了)

(這裡的 \(n\) 仍然是輸入的 \(n\) 的兩倍)

然後由於未知原因要特判 \(n=2\) ,就做完了。

kosaraju 是個啥?

每個強連通分量分別做,找到一條哈密頓迴路,那麼翻轉不在回路上的邊答案不變。

然後神奇方法衝。

wdnmd 我怎麼又掉線了……

然後標算被踩了 /cy

有乙個經典結論:只看出度序列就可以直接得到強連通情況。

然後翻轉一條邊只會修改兩個位置,就做完了。

標算和哈密頓迴路有關,大概是(?)先找乙個哈密頓迴路出來,那麼其他邊修改都是無效的,而翻轉回路上的邊會把迴路變成鏈,其他邊會覆蓋乙個區間,然後亂搞搞。

直接行列式,做完了。

被打爆了 /kk

合法當且僅當每個位置開頭的逆序對個數都是偶數。

然後 \(o(n^2)\) 有手就行。

剩下的事交給 lxl 。

想到分塊,每個塊建線段樹,然後無腦暴力,即可做到 \(o(n\sqrt )\) 。

然而線段樹的常數炸了。

我們其實只關心乙個塊內有沒有 1 ,所以可以把線段樹變成差分。雖然還是要二分查 rank ,但是常數明顯降低,就過了。

好像還有 \(o(n\sqrt n)\) 做法但是讓卡常的人都見 lxl 去吧。

wdnmd 還真是 lxl ……

穿著 ds 外衣的模擬題?不想思考了。

先 \(o(n^22^n)\) 求出每個點集組成一條鏈的方案數,然後 \(o(n^22^n)\) 做子集卷積意義下的 exp 即可。

詢問都是假的。

然後發現有不用 exp 的做法,被教育了。

還有直接衝 \(o(3^n)\) 也有一定概率通過。

先建乙個虛點,所有點向它連邊,然後就等價於求乙個內向生成森林個數。

不會矩陣樹定理的已經被區分掉了。

然後發現矩陣是乙個迴圈矩陣,求行列式有快速解法。然而我不會。

直接完全 \(k\) 分圖即可。

條件是不存在正方形,即任意兩個點的鄰居的交的大小不超過 1 。

對於乙個點 \(x\) ,任取兩個鄰居 \(a,b\) ,令 \(cnt_\gets^+ 1\) 。那麼最終任意乙個點對的 \(cnt\) 都不能超過 1 。由於只有 \(\) 個點對,而乙個點 \(x\) 貢獻的 \(cnt\) 就有 \(\) 個,所以大概能估出 \(m\) 的上界是 \(o(n\sqrt n)\) 級別。

然後直接造乙個 \(p\times p\) 的矩陣, \((u,v),(x,y)\) 有邊當且僅當 \((ux+vy)=1\pmod p\) 。相當於是每個點連了一條直線,那麼兩條直線要麼無交,要麼交為 1 。

\((u,v,w),(x,y,z)\) 有邊,當且僅當 \((u-x)^2+(v-y)^2+(w-z)^2=1\pmod p\) 。

wtf?

感性理解一下,就是向旁邊乙個單位球連邊,然後操作一下就發現三個球的交不會超過兩個點。

北大集訓2019遊記

去中關新園報到,見到了zyy,cf,lbt等各路神犇。去北大機房試機,感覺北大的機子比noi的機子好用多了。發現來北京,我需要適應熱帶沙漠氣候和溫帶季風氣候的快速轉換,有點難受。上午去考試。先讀一遍題面,感覺t1應該是比較好像但是特別繁瑣的題,t3是很難的題,t2不知道。仔細地想了想每道題,發現t2...

北大集訓2018墊底記

報道日,住的離學校挺近的,但感覺附近超市有點遠啊。下午打了場試機賽,又墊底了。試機題好可怕啊,乙個題答乙個互動,感覺自己退役穩了,不過本來就是來墊底的,也沒啥好怕的了。晚上去農園吃,感覺還行,就是沒湯有些gg 夜裡暖氣調太高了於是打低了幾度,早上起來有點冷。上午打了場day1,又墊底了。機房暖氣好足...

北大集訓 CTT 2021 部分題解

忘報名北大集訓,還是能看到題,省了 8000 塊錢,贏麻了。鴿表示沒 may be 無正解思路。鴿。k 2 的做法 考慮分治,取中間點,處理所有跨過中點的,連上左右兩邊所有到這裡的邊,遞迴下去,是 o n log n 但是有很多重複,恰好卡進。k 3 的做法,取若干關鍵點分成若干塊,開頭結尾兩塊只用...