SCOI2016 萌萌噠 題解

2021-09-10 19:24:37 字數 1709 閱讀 4236

題目大意看原題面。

我們首先考慮,對於每個相等的數,我們用並查集將其並起來,那麼由於不能有前導0,令最後集合的個數為c

cc,所以答案就是9×1

0c−1

9\times 10^

9×10c−

1,除了開頭不能選0,只有9中選擇方案外,其餘的每個數字都有10種選擇方案(只有一位數字的時候需要特判,因為此時0也算)。

由於暴力的合併的話,最壞的複雜度會達到o(n

mlog

n)o(nmlogn)

o(nmlo

gn),就只有30分,那麼由於每次都並的一整塊,所以我們用倍增的方式,將一塊一塊二進位制拆分後並起來,那麼每次合併只需o(l

og2n

)o(log^2n)

o(log2

n)的時間,然後由於最後我們需要知道每乙個元素屬於哪個集合,所以在從大到小的將塊拆開,推下去,最後就可以得知每個元素的所屬集合,複雜度o(n

logn

)o(nlogn)

o(nlog

n),所以最後看一下有多少個集合即可,最終複雜度為o(m

log2

n+nl

ogn)

o(mlog^2n+nlogn)

o(mlog

2n+n

logn

) 大的塊拆分的方式如下:

SCOI2016 萌萌噠 解題報告

scoi2016 萌萌噠 有乙個長度為 n 的大數,有 m 個形如l1,r1,l2,r2的限制,表示區間 l1,r1 和 l2,r2 完全相等,求滿足這些限制的數的個數,不能含有前導零.1 le n,m le 10 5 暴力 直接 o nm 把相等的數合成乙個並查集,最後若並查集的數量為 k 則答案...

SCOI2016 萌萌噠 並查集 倍增

傳送門 一開始是想賭一把,把節點乙個乙個的unite,然後懷著wa的心情wa了。然後又準備用離散去優化,然後又懷著wa的心情wa了。萬般無奈去查題解,發現竟然要使用倍增?倍增是啥,我多少年沒有用過了 複習了一波倍增,原來倍增也可以用在並查集上,我對並查集又有了新的理解,這個資料結構,好強啊!incl...

SCOI2016 萌萌噠 倍增 並查集

乙個長度為n的大數,用s1s2s3.sn表示,其中si表示數的第i位,s1是數的最高位,告訴你一些限制條件,每個條件表示為四個數,l1,r1,l2,r2,即兩個長度相同的區間,表示子串sl1sl1 1sl1 2.sr1與sl2sl2 1sl2 2.sr2完全相同。比如n 6時,某限制條件l1 1,r...