日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018HN省队集训

發(fā)布時(shí)間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018HN省队集训 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HNOI2018省隊(duì)集訓(xùn)

Day 1

流水賬

T1 tree
換根+求\(lca\)+求子樹和,一臉bzoj3083遙遠(yuǎn)的國(guó)度的既視感。子樹和討論一下就好了,\(lca\)?也是大力討論一波。
先寫了個(gè)線段樹標(biāo)記永久化,一發(fā)過了小樣例,然后大樣例。。。沒幾組詢問就\(WA\)了。寫了個(gè)暴力,每次輸出求出來的\(lca\)(我怎么這么機(jī)智啊),發(fā)現(xiàn)\(WA\)了,然后就對(duì)著自己的大力討論大力魔改。大概是\(10:00\)的時(shí)候大樣例終于過了,沒寫拍(因?yàn)椴粫?huì)寫\(win\)下的拍qaq)。
T2 function
看出來了結(jié)論,一直在\(yy\)怎么用斜率搞一搞。最終還是沒能\(yy\)出來,交了個(gè)\(42\)的暴力。
T3 or
一開始還以為自己只會(huì)寫\(O(n2^k)\)的暴力\(dp\),然后轉(zhuǎn)念一想其實(shí)二進(jìn)制位都是等價(jià)的,就寫了個(gè)\(O(nk^2)dp\)過了樣例。最近有些\(ntt\)上癮所以當(dāng)然是順手敲了發(fā)\(ntt\)
預(yù)估得分\(100+42+59=201\),實(shí)際得分\(83+42+59=184\)
T1被卡常qaq,我活該大常數(shù)。

總結(jié)

得分比較穩(wěn)定,該拿得分基本上都拿到了(卡常這件事出題人自己也沒想到)。T2在考場(chǎng)上缺乏去硬剛的信念與勇氣導(dǎo)致沒有做出來。T3的正解比較神仙。

簡(jiǎn)要題解

tree

在換根的前提下子樹有三種情況:若詢問點(diǎn)不是根的祖先則子樹就是原來的子樹,若詢問點(diǎn)就是根則子樹就是整棵樹,若詢問點(diǎn)是根的祖先則子樹是整棵樹除去根所在的詢問點(diǎn)的那個(gè)兒子。這部分就是bzoj遙遠(yuǎn)的國(guó)度。
\(lca\)的情況相對(duì)復(fù)雜一些:若兩個(gè)點(diǎn)都在根的子樹中則\(lca\)就是在原樹中的\(lca\),若一個(gè)在一個(gè)不在則\(lca\)就是根,若兩個(gè)都不在,需要判斷兩點(diǎn)路徑和根到\(1\)號(hào)點(diǎn)路徑有沒有交,也就是判斷兩點(diǎn)在原樹中的\(lca\)是不是根的祖先,若不是則\(lca\)還是原樹中的\(lca\),否則\(lca\)是路徑交中深度最大的那個(gè)點(diǎn)。

function

首先一組詢問\((x,y)\)的答案是\(\min_{i\in[1,y]}S_y-S_i+A_i(x-y+i)\),其中\(S_i\)\(A_i\)的前綴和。
\(x-y\)為自變量,相當(dāng)于在所有形如\(y=A_ix+A_ii-S_i\)的直線中找一個(gè)最小值,維護(hù)下凸殼就行了。
由于存在一些特殊性質(zhì)所以可以用單調(diào)棧維護(hù)凸殼。

or

首先觀察一下\(dp\)式:
\[dp[i][j]=\sum_{k=1}^{j}dp[i-1][j-k]\times\binom{j}{k}\times2^{j-k}\]
也就是
\[\frac{dp[i][j]}{j!}=\sum_{k=1}^{j}\frac{dp[i-1][j-k]\times2^{j-k}}{(j-k)!}\times\frac{1}{k!}\]
構(gòu)造指數(shù)型生成函數(shù)
\[F_i(x)=F_{i-1}(2x)\times (e^x-1)\]
\(e^x=\sum_{i=0}^{\infty}\frac{1}{i!}x^i\)\(F_{i-1}(2x)\)是因?yàn)榘?span id="ozvdkddzhkzd" class="math inline">\(2^{j-k}\)和生成函數(shù)里的\(x^{j-k}\)合并了)
\[F_n(x)=\prod_{i=0}^{n-1}e^{2^ix}-1\]
當(dāng)\(n\)是偶數(shù)的時(shí)候滿足\(F_n(x)=F_{\frac n2}(x)\times F_{\frac n2}(2^{\frac n2}x)\)
所以倍增求一下就好了,分\(n\)是奇數(shù)還是偶數(shù)討論一下(偶數(shù)直接除二,奇數(shù)減一變成偶數(shù))

落實(shí)情況

題目treefunctionor
完成情況correctedcorrectedcorrected

Day 2

流水賬

T1看了半天發(fā)現(xiàn)是不會(huì)做的。先寫了\(30pts\)暴力,然后發(fā)現(xiàn)“只有一個(gè)質(zhì)因子”就可以完全按照大小來做,就寫了個(gè)\(BIT\)(結(jié)果\(laofu\)說值的個(gè)數(shù)很少只要開桶就行了)
T2先寫了個(gè)暴力打個(gè)表,想著\(40pts\)的狀壓結(jié)果推出來了一個(gè)\(O(n)\)的式子,直接就\(80pts\)了。
T3\(10pts\)暴力
T2打表,塊大小\(50w\)打了\(60k\)(三個(gè)表),本機(jī)跑極限數(shù)據(jù)開\(O2\)\(5s\)
預(yù)估得分\(40+80+10=130\),實(shí)際得分\(40+0+10=50\)
由于日常考試分不清到底測(cè)文件夾內(nèi)還是文件夾外所以習(xí)慣性地把三份代碼都粘到文件夾外,我也不知道為什么就按成了\(Ctrl-x\)。于是愉快地“未找到源程序”qaq。
以后這種事情還是不要干了吧。

總結(jié)

我覺得這個(gè)分應(yīng)該是我的極限實(shí)力了吧qaq。

簡(jiǎn)要題解

walk

留坑

game

首先\(O(n)\)的答案式是\(n!-2\sum_{i=0}^{n-1}i!+\sum_{i=0}^{n-2}i!(n-i-1)+1\)
大力開一下\[原式=n!-2\sum_{i=0}^{n-1}i!+(n-1)\sum_{i=0}^{n-2}i!-\sum_{i=0}^{n-2}i!\times i+1\\=n!-2\sum_{i=0}^{n-1}i!+(n-1)\sum_{i=0}^{n-2}i!-\sum_{i=0}^{n-2}[(i+1)!-i!]+1\\=n!-3\sum_{i=0}^{n-1}i!+n\sum_{i=0}^{n-2}i!+2\\=(n-3)\sum_{i=0}^{n-1}i!+2\]
所以就只要求一個(gè)階乘前綴和,打表階乘以及前綴和即可。

string

詢問離線,從小到大枚舉\(r\),維護(hù)每個(gè)左端點(diǎn)的答案。
有一個(gè)這樣的性質(zhì):一個(gè)串的所有回文后綴一定可以被分為不超過\(\log n\)個(gè)等差數(shù)列。
先考慮最長(zhǎng)回文后綴,那么所有長(zhǎng)度超過它的一半的回文后綴一定會(huì)構(gòu)成等差數(shù)列(這個(gè)畫畫圖就好了),要想不滿足等差必須讓長(zhǎng)度減小一半,所以最多只有\(\log n\)個(gè)等差數(shù)列。
每個(gè)等差數(shù)列會(huì)讓一段連續(xù)的\(l\)的答案增大\(1\)。具體來講,這一段的左端點(diǎn)是等差數(shù)列中最大的回文后綴上一次出現(xiàn)的位置+1(如果之前沒出現(xiàn)過就是\(1\)),右端點(diǎn)是等差數(shù)列中最小的回文后綴的出現(xiàn)位置。
用線段樹維護(hù)每個(gè)回文后綴最后出現(xiàn)的位置(為保證復(fù)雜度修改的時(shí)候只能修改最長(zhǎng)回文后綴,所以查詢的時(shí)候要查該回文后綴在回文樹上的整棵子樹),然后用樹狀數(shù)組維護(hù)每個(gè)左端點(diǎn)的答案。

落實(shí)情況

題目walkgamestring
完成情況N/Acorrectedcorrected

Day 3

流水賬

T1想了一個(gè)\(O(n\log^2n)\)的假算法,過了大樣例,感覺很對(duì)的樣子。
T2看上去像是個(gè)\(dp\),不管了先去做T3。
T3打表,觀察規(guī)律無果,\(10pts\)滾粗。
發(fā)現(xiàn)T1的算法是假的,但是并沒有想到正解。
T2\(yy\)了半天寫了一個(gè)\(O(n^3)\)的做法,下考前寫了鏈,感覺\(O(n^2)\)的做法也不是很難,只是沒有想清楚具體怎么實(shí)現(xiàn)所以就沒有寫。
預(yù)估得分\(??+50+10=??\),實(shí)際得分\(95+50+10=155\)
沒想到T1亂搞有\(95\)分,據(jù)說還有亂搞\(AC\)的。

總結(jié)

在T1上面糾結(jié)了太久,導(dǎo)致T2沒有把分?jǐn)?shù)打滿。如果是在滿狀態(tài)下開T2的話應(yīng)該可以拿到\(80\)分的樣子吧。

簡(jiǎn)要題解

c

破環(huán)成鏈,對(duì)于\(l<r\)的線段,新加入線段\([l+m,r+m]\),否則加入線段\([l,r+m]\)。這樣就需要選出一個(gè)長(zhǎng)為\(m\)的區(qū)間包含盡可能多的不相交線段。
考慮強(qiáng)制每一條線段作為第一條線段,根據(jù)貪心,每選過一條線段之后下一條選的線段是確定的。不妨記為\(nxt_i\),那么我們只關(guān)心每一條線段跳多少次\(nxt\)后達(dá)到\(m\)長(zhǎng)度。把\(nxt\)數(shù)組倍增實(shí)現(xiàn)即可。

a

暴力枚舉這\(k\)個(gè)人路徑的交,這肯定是樹上的一條簡(jiǎn)單路徑。那么這條路徑對(duì)答案的貢獻(xiàn)就是\(f_x\times f_y\),其中\(x,y\)是枚舉的兩個(gè)點(diǎn),\(f_x\)表示在\(x\)的子樹中選出\(k\)個(gè)點(diǎn)使得兩兩\(lca\)\(x\)的方案數(shù)。
如果\(x,y\)其中一點(diǎn)是路徑的\(lca\),不妨設(shè)是\(x\),那么對(duì)答案的貢獻(xiàn)應(yīng)該是\(g_{x,y}\times f_y\),其中\(g_{x,y}\)表示點(diǎn)\(x\)\(y\)為根方向時(shí)的\(f\)值。
考慮滿足“兩兩\(lca\)\(x\)”這一條件,顯然需要有若干個(gè)點(diǎn)在\(x\)上,然后在\(x\)的每個(gè)子樹中選至多一個(gè)點(diǎn)。
設(shè)一個(gè)多項(xiàng)式\(P_x(x)\)表示在\(x\)中選出\(i\)個(gè)子樹的方案數(shù)的生成函數(shù),鑒于每棵子樹只能選一個(gè),所以\(P(x)=\sum_{son}(1+size_{son}x)\times(1+x+x^2+x^3+...)\),對(duì)于每個(gè)點(diǎn)分治\(FFT\)即可,這樣的總復(fù)雜度是\(O(n\log^2n)\)的。
然后求\(f\)的話就是\(\sum_{i=0}^{\min(k,deg_x)}A_k^i\times [x^i]P_x(x)\),算這個(gè)的復(fù)雜度是\(O(n)\)的。

這樣可以求出所有的\(f\),至于求\(g_{x,y}\),其實(shí)就是求其生成函數(shù)\(Q_{x,y}(x)=P_x(x)\times\frac{1+(n-size_y)x}{1+size_yx}\),這個(gè)東西是一個(gè)多項(xiàng)式除以二項(xiàng)式的形式,是可以做到\(O(deg)\)的。具體使用姿勢(shì)可以參考\(CTSC2018\)假面一題。

這樣對(duì)于每個(gè)兒子都直接\(O(deg)\)求一遍的話復(fù)雜度可能會(huì)退化成\(O(n^2)\)。發(fā)現(xiàn)除掉的內(nèi)容只和子樹\(size\)有關(guān),而一個(gè)點(diǎn)不同大小的兒子最多只有\(O(\sqrt n)\)個(gè),所以只要記一下,對(duì)\(size\)相同的兒子不重復(fù)處理即可。復(fù)雜度\(O(n\log^2n+n\sqrt n)\)

i

打表發(fā)現(xiàn)\(f(i)\)表示\(i\)在序列中出現(xiàn)的次數(shù)。
考慮一些東西的實(shí)際含義:\(g(i)\)表示前\(i\)個(gè)數(shù)出現(xiàn)的總次數(shù),那么也就是第\(i\)個(gè)數(shù)最后出現(xiàn)的位置。
又因?yàn)?span id="ozvdkddzhkzd" class="math inline">\(g(i)\)是\(f(i)\)的前綴和,所以\(g(f(i))-f(f(i))=g(f(i)-1)\),表示最后一個(gè)值為\(f(i)-1\)的位置(下標(biāo))。
也就是說\(h(i)\)就表示從\(i\)往前每一段相同數(shù)字的最后一位的\(g(g(i))\)之和。
考慮\(g(g(i))\)怎么求。
\[g(g(i))-g(g(i-1))=\sum_{j=g(i-1)+1}^{g(i)}f(i)\\=\sum_{j=g(i-1)+1}^{g(i)}i=i\times f(i)\]
所以\(g(g(i))=\sum_{j=1}^{i}j\times f(j)\)
打表可以發(fā)現(xiàn)當(dāng)\(n\)達(dá)到\(10^9\)時(shí)\(f(n)\)不會(huì)超過\(10^6\),所以可以按照\(f(i)\)分段處理,復(fù)雜度大概是\(O(T\times10^6)\)

落實(shí)情況

題目cai
完成情況correctedN/Acorrected

Day 4

流水賬

\(wfj\)的題,預(yù)感大事不妙。
T1這顯然就是\(wfj\)在考場(chǎng)上看錯(cuò)題的那個(gè)版本吧。強(qiáng)行給\(HNOId2t3\)加一維狀態(tài)復(fù)雜度大概是\(O(n^2d^2)\)?反正能過前兩個(gè)\(subtask\)
T2只會(huì)\(O(2^{x^2}n^2)\)的暴力。
T3我發(fā)現(xiàn)我不會(huì)\(O(n)\)做后面兩問,所以就爆零了。
想寫個(gè)T2的退火,結(jié)果沒有獲得比暴力分更高的分?jǐn)?shù)。
大概是\(12:00\)的時(shí)候一群一中\(dalaoAK\)離場(chǎng)了,好強(qiáng)啊。
預(yù)估得分\(30+15+0=45\),實(shí)際得分\(30+15+0=45\)
不得不說穩(wěn)得一匹。

總結(jié)

希望接下來的幾天里沒有今天這樣的毒瘤場(chǎng)。
p.s. \(wfj\)被阿掉了(不過他本人似乎還不滿足?)

簡(jiǎn)要題解

y

凸優(yōu)化

s

套結(jié)論

f

不會(huì)

落實(shí)情況

題目ysf
完成情況N/AN/AN/A

Day 5

流水賬

T1一眼網(wǎng)絡(luò)流的既視感,一開始想著建立二分圖,然后。。。一個(gè)黑點(diǎn)匹配兩個(gè)白點(diǎn)?還要最大權(quán)匹配?不太可做吧。感覺自己不太會(huì)寫\(30pts\)的狀壓\(dp\),只要硬著頭皮剛正解。
大概是\(9:00\)左右的樣子靈感突顯:拆成一個(gè)三分圖。然后二十分鐘敲完費(fèi)用流,一測(cè)大樣例就過了,爽。
T2看了一眼,就是用樹剖維護(hù)\(bitset\)然后搞一搞,但是統(tǒng)計(jì)答案我不會(huì)啊,只好去看T3。
T3這這這不是我哪天在洛谷上見過的原題嗎?有一個(gè)很顯然的結(jié)論:枚舉左端點(diǎn),右端點(diǎn)從左往右掃排名一定單調(diào)減,權(quán)值一定單調(diào)不降,所以就可以二分交點(diǎn),問題轉(zhuǎn)化為求一個(gè)子串在原串中的排名的問題。又是因?yàn)椴惶珪?huì)寫\(30pts\)所以選擇剛正解,然后胡亂\(yy\)了一個(gè)\(O(n\log^2n)\)的做法,希望不會(huì)被卡常。
后來發(fā)現(xiàn)T1也是原題。跑到洛谷上交了兩道題,于是莫名變成了\(IOI\)賽制。(雖然基本上都是一遍過的)
T2發(fā)現(xiàn)了一種網(wǎng)絡(luò)流統(tǒng)計(jì)答案的方法,但是寫完T3已經(jīng)\(12:30\)了,又覺得網(wǎng)絡(luò)流應(yīng)該跑不過幾個(gè)點(diǎn),就沒寫了(結(jié)果蘿卜跟我講網(wǎng)絡(luò)流有\(45pts\)?)
預(yù)估得分\(100+5+100=205\),實(shí)際得分\(100+5+100=205\)

總結(jié)

T2沒有嘗試更高的分?jǐn)?shù)比較可惜。

簡(jiǎn)要題解

marshland

我們稱\(X+Y\)為奇數(shù)也就是有危險(xiǎn)度的點(diǎn)為黑點(diǎn),\(X+Y\)為偶數(shù)也就是沒有危險(xiǎn)度的點(diǎn)為白點(diǎn)。
而白點(diǎn)內(nèi)部又分為兩類:行號(hào)(列號(hào)也行)為奇數(shù)和偶數(shù)的點(diǎn),將其分別稱為\(1\)類點(diǎn)和\(2\)類點(diǎn)。
可以發(fā)現(xiàn)每一塊石頭都恰好覆蓋了一個(gè)黑點(diǎn)、一個(gè)\(1\)類點(diǎn)和一個(gè)\(2\)類點(diǎn)。
所以建立一個(gè)類似三分圖的模型:(用\((w,cost)\)表示容量為\(w\)費(fèi)用為\(cost\)的邊)
\(S\)向每個(gè)\(1\)類點(diǎn)連\((1,0)\),把每個(gè)黑點(diǎn)拆成入點(diǎn)和出點(diǎn),每個(gè)\(1\)類點(diǎn)向相鄰的每個(gè)黑點(diǎn)的入點(diǎn)連\((1,0)\),每個(gè)黑點(diǎn)的入點(diǎn)向出點(diǎn)連\((1,V_{i,j})\),出點(diǎn)向相鄰的\(2\)類點(diǎn)連\((1,0)\)
限制總流量不超過\(m\),即求的是最大費(fèi)用可行流而非最大費(fèi)用最大流。仔細(xì)想一想就會(huì)發(fā)現(xiàn)石頭數(shù)量越多并不能保證解不更劣。

party

首先這幾個(gè)人聚會(huì)的點(diǎn)一定是\(lca\)
\(bitset\)維護(hù)每個(gè)點(diǎn)到樹鏈剖分中這個(gè)點(diǎn)的\(top\)的路徑并,再開一棵線段樹維護(hù)區(qū)間并集。
這樣查詢路徑的時(shí)候就可以做到一個(gè)\(\log\)
考慮求出每個(gè)點(diǎn)到\(lca\)路徑的\(bitset\),再求\(dp(S)\)表示\(S\)集合中的點(diǎn)到\(lca\)路徑的并。
根據(jù)霍爾定理答案就是\(\min(\frac{dp(S)}{|S|})\)
復(fù)雜度是\(O((n+qc\log n+q2^c)\frac {m}{\omega})\)

platform

有一個(gè)很顯然的結(jié)論:枚舉左端點(diǎn),右端點(diǎn)從左往右掃排名一定單調(diào)減,權(quán)值一定單調(diào)不降,所以就可以二分交點(diǎn)。
問題轉(zhuǎn)化為求一個(gè)子串在原串中的排名的問題,也就是求原串中有多少個(gè)本質(zhì)不同子串的字典序比給定子串的要大。
我們假設(shè)要算的是子串\(S_{l..r}\)
在后綴排序中排在\(l\)后面的所有后綴中本質(zhì)不同的子串的字典序一定都比\(S_{l..r}\)的要大。
而排在前面的呢?一定沒有嗎?
我們發(fā)現(xiàn)保證沒有的情況當(dāng)且僅當(dāng)\(S_{l..r}\)這個(gè)子串是在后綴\(l\)中第一次出現(xiàn)。
如果是第一次出現(xiàn)那么可以直接計(jì)算答案\(ans_{S_{l..r}}=sun_n-sum_{Rank_l}+n-r+1\)
否則我們就找到這個(gè)子串第一次出現(xiàn)的位置然后再計(jì)算即可。
如何求第一次出現(xiàn)的位置?在\(SA\)上二分\(lcp\)即可。
復(fù)雜度兩個(gè)\(\log\),然而比\(std\)一個(gè)\(\log\)的線段樹跑得還快qaq。

落實(shí)情況

題目marshlandpartyplatform
完成情況correctedcorrectedcorrected

Day 6

流水賬

瀏覽一遍題目以后發(fā)現(xiàn)只有T2比較可做,就想了想容斥那方面的,也就是計(jì)算所有包含\(0,1,2,3\)對(duì)矛盾的三元組。
\(0\)想了蠻久怎么\(O(1)\)算,然后。。。我選擇寫\(O(n)\)的。
\(1\)直接枚舉邊,感覺比\(0\)的還要好寫一點(diǎn)。
\(2\)的話枚舉點(diǎn),我開了個(gè)\(vector\)瞎搞,還帶個(gè)排序的\(\log\)。反正這也不是復(fù)雜度瓶頸。
\(3\)就是前天晚上葉佬講過的東西,這個(gè)結(jié)論的證明以及實(shí)現(xiàn)應(yīng)該都不難。
沒造極限數(shù)據(jù)測(cè),所以存在翻車的可能性。
然后T1寫了\(A_i,B_i>0\)的點(diǎn),交了一個(gè)\(O(n!^2)\)的鬼玩意。T3寫了個(gè)\(Hash\)
預(yù)估得分\(20+100+20=140\),實(shí)際得分\(30+100+20=150\)
某人又被C++11卡CE了

總結(jié)

會(huì)寫的都寫了。T2沒造極限數(shù)據(jù)測(cè)比較容易出鍋,這次沒翻不保證以后也不會(huì)翻。

簡(jiǎn)要題解

gift

對(duì)于排列\(a,b\),連邊\((a_i,b_i)\),這樣會(huì)形成若干個(gè)環(huán)。每個(gè)環(huán)需要交換環(huán)長(zhǎng)\(-1\)次,所以答案就是\(n-\)環(huán)的數(shù)量。
現(xiàn)在我們的排列是不完整的,也就是說構(gòu)出來的圖也是不完整的。因?yàn)榇鸢钢缓铜h(huán)的個(gè)數(shù)有關(guān),所以我們可以把一些已經(jīng)確定了的部分合并起來,這樣圖中就只剩下了四種東西:完整的環(huán)、起點(diǎn)確定終點(diǎn)不確定的鏈、起點(diǎn)不確定終點(diǎn)確定的鏈以及起點(diǎn)終點(diǎn)都不確定的鏈。
我們求出每一種東西的個(gè)數(shù),這個(gè)可以直接\(O(n)dfs\)
發(fā)現(xiàn)完整的環(huán)在計(jì)算過程中是沒有貢獻(xiàn)的,只是把答案全部向右移了一位,所以可以不用考慮。
我們需要用剩下的三種東西拼出若干個(gè)環(huán)的方案數(shù),而實(shí)際上只要計(jì)算出用一種東西拼出若干個(gè)環(huán)的方案數(shù)然后卷積起來就可以了。
對(duì)于起點(diǎn)終點(diǎn)都不確定的鏈,這個(gè)的方案數(shù)是\(S[s1][i]\),其中\(S[i][j]\)表示第一類斯特林?jǐn)?shù),\(s1\)是這種鏈的數(shù)量。這個(gè)東西可以\(O(n^2)\)求出。
對(duì)于起點(diǎn)終點(diǎn)有一個(gè)確定的鏈,方案數(shù)不好直接求,但是可以求拼出至少\(i\)個(gè)環(huán)的方案數(shù)。
\(f[i]=\sum_{j=i}^{n}C[n][j]\times S[j][i]\times A[m+n-j][n-j]\)
其中\(n\)是這種鏈的數(shù)量,\(m\)是起點(diǎn)終點(diǎn)都不確定的鏈的數(shù)量,\(S\)是第一類斯特林?jǐn)?shù),\(C,A\)分別是組合數(shù)與排列數(shù)。
然后做一個(gè)簡(jiǎn)單容斥即可。復(fù)雜度\(O(n^2)\)
注意最后還要乘上一個(gè)階乘。

girls

總答案=任意三點(diǎn)的貢獻(xiàn)-包含至少一對(duì)矛盾的三點(diǎn)的貢獻(xiàn)+包含至少兩對(duì)矛盾的三點(diǎn)的貢獻(xiàn)-包含至少三對(duì)矛盾的三點(diǎn)的貢獻(xiàn)。
第一部分可以考慮枚舉其中一個(gè)\(O(n)\)計(jì)算。
第二部分枚舉邊,計(jì)算剩下的\(n-2\)個(gè)點(diǎn)\(O(m)\)
第三部分枚舉點(diǎn),對(duì)一個(gè)點(diǎn)的相鄰點(diǎn)排序,然后分當(dāng)前點(diǎn)是最小、次小還是最大三種情況討論,\(O(n\log n)\)
第四部分就是三元環(huán)計(jì)數(shù),可以將無向圖重定向,每條邊都指向度數(shù)較大的那個(gè)點(diǎn),若度數(shù)相同則指向標(biāo)號(hào)較大的點(diǎn)。可以發(fā)現(xiàn)這樣構(gòu)出了一個(gè)\(DAG\),而且保證每個(gè)點(diǎn)的出度不超過\(\sqrt m\)
因?yàn)閷?duì)于一個(gè)原圖中度數(shù)小于\(\sqrt m\)的點(diǎn)顯然成立,對(duì)于一個(gè)原圖中度數(shù)大于等于\(\sqrt m\)的點(diǎn),要連向他的點(diǎn)的度數(shù)至少大于等于\(\sqrt m\),然后這樣的點(diǎn)至多只有\(\sqrt m\)個(gè),于是證明這個(gè)結(jié)論成立。
\(DAG\)中的一個(gè)三元環(huán)一定是有兩條邊共終點(diǎn),我們考慮枚舉剩下的那一條邊,這樣這條邊起點(diǎn)終點(diǎn)的鄰接點(diǎn)集合的交就是找出來的那些三元環(huán)。這樣一來其實(shí)三元環(huán)的數(shù)量也不超過\(m\sqrt m\),復(fù)雜度\(O(m\sqrt m)\)

string

落實(shí)情況

題目giftgirlsstring
完成情況correctedcorrectedN/A

Day 7

流水賬

新一代的毒瘤題啊。
T1只會(huì)寫爆搜,然后寫了樹的\(10pts\)。(這好歹也是正解的第一步啊)
T2想偏了,卡在高斯消元這個(gè)問題上,于是毫無進(jìn)展,成功爆零。
T3想寫個(gè)\(10pts\)
預(yù)估得分\(20+0+10=30\),實(shí)際得分\(20+0+0=20\)
T3直接乘會(huì)爆\(long\ long\),所以需要加一些奇妙的東西或者直接int128

總結(jié)

其實(shí)今天的題目并沒有想象中的那么毒瘤吧(畢竟自己還是可以改出來的)。
可能是受到了周圍環(huán)境的影響導(dǎo)致沒有做到最好的投入吧。

簡(jiǎn)要題解

inkmaster

對(duì)于樹的情況,答案為\(C\times(C-1)^{n-1}\)
在仙人掌上,顯然每一個(gè)環(huán)是獨(dú)立的,我們?cè)谟?jì)算這個(gè)環(huán)的時(shí)候不算環(huán)根,這樣把每個(gè)環(huán)的方案乘起來再乘個(gè)\(C\)就是最后的答案了。
考慮每一個(gè)環(huán),某個(gè)環(huán)如果直接按照樹的方法去計(jì)算,會(huì)多算上首尾相同的方案,所以可以考慮容斥,減去強(qiáng)制首尾相同的方案(這時(shí)候倒數(shù)第二個(gè)點(diǎn)的顏色可能會(huì)與首尾相同),加上三個(gè)點(diǎn)相同的方案,減去四個(gè)...列出式子來就是:(假設(shè)環(huán)的大小不算環(huán)根是\(sz\)
\[(C-1)^{sz}-(C-1)^{sz-1}+(C-1)^{sz-2}+...\pm (C-1)\]
\(\pm\)取決于\(sz\)的奇偶性)
這是一個(gè)首項(xiàng)是\(C-1\)公比是\(1-C\)的等比數(shù)列,求一下和:
\[\pm(C-1)\frac{1-(1-C)^{sz}}{1-(1-C)}=\pm(C-1)\frac{1-(1-C)^{sz}}{C}\]
這樣就可以再\(O(\log n)\)的時(shí)間內(nèi)計(jì)算每一個(gè)環(huán)的貢獻(xiàn)了。
現(xiàn)在的問題在于:環(huán)的數(shù)量可以是\(O(n)\)個(gè),一個(gè)個(gè)計(jì)算,復(fù)雜度是\(O(qn\log n)\)
發(fā)現(xiàn)式子只和環(huán)的大小有關(guān),而一棵\(n\)個(gè)節(jié)點(diǎn)的樹上不同大小的環(huán)的個(gè)數(shù)是\(O(\sqrt n)\)級(jí)別的。把大小相同的環(huán)的貢獻(xiàn)放在一起算,復(fù)雜度就是\(O(q\sqrt n\log n)\)

branching

發(fā)現(xiàn)在每一個(gè)位置選擇\(2\)操作的結(jié)果都是一樣的,所以有一個(gè)比較顯然的結(jié)論:存在一個(gè)\(x\)值使得對(duì)于所有距離終點(diǎn)不超過\(x\)的點(diǎn)都選擇直接一步步走過去,而其余的點(diǎn)就選擇進(jìn)行\(2\)操作。
設(shè)進(jìn)行\(2\)操作走到終點(diǎn)的期望步數(shù)為\(x\),則有方程:
\[x=1+\frac{\sum_i\min(dis(i,T),x)}{n}\]
因?yàn)橛幸粋€(gè)\(\min\)所以沒有辦法直接解這個(gè)方程,發(fā)現(xiàn)右邊這個(gè)函數(shù)的斜率是遞減的,可以考慮二分\(x\)。二分到整數(shù)即可,因?yàn)橹灰值秸麛?shù)以后,那個(gè)\(\min\)里面哪些點(diǎn)取\(dis(i,T)\)哪些點(diǎn)取\(x\)就已經(jīng)確定了,就可以解方程算出\(x\)了。
現(xiàn)在僅剩的一個(gè)問題在于怎么計(jì)算右式。我們發(fā)現(xiàn)就是計(jì)算距離\(T\)不超過\(x\)的點(diǎn)有多少個(gè)以及他們到點(diǎn)\(T\)的距離和。這個(gè)就直接動(dòng)點(diǎn)分一下就好了嘛。
自己寫了一個(gè)\(O(n\log^3n)\)的做法,題解做法是\(O(n\log^2n)\)的,回去再看看qaq。

euclid

落實(shí)情況

題目inkmasterbranchingeuclid
完成情況correctedcorrectedN/A

Day 8

流水賬

T1這這這線段樹維護(hù)矩陣然后不就做完了嗎。但是這個(gè)復(fù)雜度貌似有點(diǎn)鬼啊qaq。
T2這什么鬼題目啊,出題人毒瘤吧。
T3看一眼數(shù)據(jù)范圍感覺像是\(FWT\),然后就\(yy\)了一個(gè)很有道理的\(O(\sum k_i+m2^m)\)做法。一發(fā)過大樣例。
然后滾回去寫T1,倒是一下子就寫完了,也沒怎么\(debug\)就過了樣例。預(yù)估\(75\)分。
T2寫了個(gè)退火,就是完全隨機(jī)亂走的那種。
下考前意識(shí)到?jīng)]算退火的時(shí)間復(fù)雜度,心想著算了算了反正這題也是沒分的就沒管了。
預(yù)估得分\(75+0+100=175\),實(shí)際得分\(65+8+100=173\)
T1構(gòu)造轉(zhuǎn)移矩陣的時(shí)候?qū)懙氖?#61;1而不是++然后\(\sum|s_i|=0\)的點(diǎn)就\(G\)了。
然后T2\(spj\)出鍋,喜聞樂見.jpg

總結(jié)

T1的復(fù)雜度是假的這我能說什么。
T2的正解是假的這我能說什么。
T3全場(chǎng)艸標(biāo)算這我能說什么。

簡(jiǎn)要題解

kill

對(duì)所有不合法串構(gòu)造\(AC\)自動(dòng)機(jī),然后在一些禁止節(jié)點(diǎn)上打上標(biāo)記,\(dp\)即可。
考慮動(dòng)態(tài)修改還要區(qū)間查詢,所以用矩陣實(shí)現(xiàn)\(dp\)轉(zhuǎn)移,用線段樹維護(hù)區(qū)間矩陣乘積。禁止節(jié)點(diǎn)在\(dp\)中是沒有任何意義的,所以把除禁止節(jié)點(diǎn)外的所有節(jié)點(diǎn)重新標(biāo)號(hào)再做矩陣乘法,復(fù)雜度\(O(q\log n(\sum s_i-m)^3)\)。能過。

plitics

eat

考慮枚舉選出了\(k\)個(gè)拼盤后或起來的結(jié)果,一共是\(2^m\)種狀態(tài)。因?yàn)槲覀兛梢运愠雒恳环N狀態(tài)的價(jià)值,所以我們只關(guān)心每一種狀態(tài)被構(gòu)造出來的方案數(shù)。
設(shè)\(f_i\)表示是\(i\)集合的子集的集合數(shù)量,那么\(g_i=\binom{k}{f(i)}\)即表示選出\(k\)個(gè)盤子或起來集合是\(i\)的子集的方案數(shù)。
那么只要求出\(f_i\),算出\(g_i\)再想辦法還原回去就好了。
顯然是可以\(FWT\)的吧,復(fù)雜度不算讀入是\(O(n+m2^m)\)
所以說這題的復(fù)復(fù)雜度瓶頸實(shí)際上在讀入。

不過大家寫的貌似普遍都是,利用期望的線性性,對(duì)每一位分別考慮,然后復(fù)雜度就是\(O(m)\)的,非常優(yōu)秀。

感覺\(std\)的做法比較像bzoj3771Triple這道題的加強(qiáng)版,就是大力容斥,然后利用系數(shù)是帶符號(hào)第一類斯特林?jǐn)?shù)的性質(zhì)做到\(O(km2^m)\)

落實(shí)情況

題目killpliticseat
完成情況correctedcorrected?corrected

轉(zhuǎn)載于:https://www.cnblogs.com/zhoushuyu/p/9211103.html

總結(jié)

以上是生活随笔為你收集整理的2018HN省队集训的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。