一句話題解(2021.4)


7069. 【2021.4.28 NOI模擬】匹配(match)

打表發現的神必結論:設bi=i&pi,把b的計算次數寫下來發現只有1/-1,再發現就是\(\large (-1)^{popc(\text{異或和}\;b_{0\text{~}n-1},0\text{~}n-1)}\)

發現次數只與1的位數個數奇偶有關,且每個i獨立,每個bi可能取aj (j⊆i),分奇偶對a高維前綴和即可快速求得Σa

題解做法:實際是個行列式,(i,j)是a[i&j],設ai=Σbj (j⊆i),發現把a寫成b后消元剛好得到Πb,因為對於每個[i,i],每個j⊆i都會在[i,j]時消掉b[j,j],則[i,i]只會剩下b[i,i]

逆FMT即可

6210. wsm

觀察可得,答案就是把長度AB從1開始交替乘變為AB的方案,證明考慮構造,每次把A加上A+合並后len*k,這樣總長就乘k了

必要性感受一下,如果每次不這樣就會在最終序列產生空格/重合,所以充要(確信

然后枚舉交替乘的次數,把因子拆開反演即可

6152. 【GDOI2019Day2模擬2019.4.29】Endless

SA+哨點找出所有平方串,然后st表+並查集維護

第i層維護長2^i的段是否合並,如果兩個xy在第i層合並了則[x,x+2^i)和[y,y+2^i)已合並,遞歸往下即可,總nlognα

PE755 Not Zeckendorf

直接暴力每個數是否出現,這樣是2^62,只要把1~38個組合的結果預處理后面2^24暴力即可

7067. 【2021.4.24NOI模擬】對稱線性規划問題

構造最優解,每次把i和4n-i+1放一起,這樣變成了n個點,每個點度數4有自環,找若干哈密頓環(度數=2)覆蓋

構造:歐拉回路取第奇數條邊,若一個點無自環則兩組出入各+1共度數2,一個自環兩種也都為2,兩個自環顯然

7066. 【2021.4.24 NOI模擬】ehzeux與圓周(circle)

agc028Dhttps://www.cnblogs.com/gmh77/p/14012638.html

7065. 【2021.4.24 NOI模擬】樟樹

類似回滾莫隊的樹分塊+可撤銷並查集,分塊按深度從下往上根號分,O(n^1.5 log)能過很不河里

CF1517

A:除2050后求數位和

B:等於把行重排列,使得最后每列最大值和最小,把全局前m最大按順序排在對應行前即可

C:神必構法:每次新加一個數,貪心往左走,否則往下走

實際上可以按對角線考慮,在當前列要停下的那個的兩邊會往中間靠,所以方案是唯一的

D:判k為奇數,偶數的話一定是走k/2步后原路返回否則兩條路一定有更優的,所以全部走k/2步后答案*2

E:陰間討論,最后一定是(P)C..CPC..PCP..P(C)這樣,硬點PCC..和P..PC段長度>=3,其余情況可以為空,線段樹計算,再加上P..PC..P的情況

這樣PC.....C和P....PC會算重,判掉

F:假設答案>=ans,則把每個沒選的點(dis>ans)往外擴ans步后仍有點未被覆蓋,枚舉ans樹形dp,維護f[i,j]表示往上擴j步和g[i,j]表示最深沒擴到的點深j,轉移前綴和一下即可O(n^3)

G:按xy奇偶這樣染色:

323
010
323

1是關鍵點,則不合法的路徑一定是相連的0-1-2-3,建圖最小割

H:

CF878

切AB就贏了

A:拆位,變成每一位不變/賦0/賦1/異或,最后用三次解決

B:接起來后原本首尾的位置會跑到段中間的間隔里,如果%K=0就可以消掉繼續,遞歸累加

注意特判若最后一層消掉則可以全消,答案=0

C:對於一個塊的每一維維護min和max,用set維護所有塊,滿足相鄰的完全偏序,新加一個塊就找到最后一個可能合並的,合並后繼續搞,答案就是set里權值最大的塊大小

D:WC2021T2,設f[i,s]表示如果=1的全部小於=0的,最終會落到哪里,點乘min取or max取and,bitset優化

初值f[i,s]=[i∈s],因為初始為i哪塊包含i就在哪,最后排序a從大到小枚舉算狀態直到f[s]=0,去掉最后一個剛好轉變,所以答案就是這個

E:離線掃右端點,不斷加入貪心合並直到新加的塊為負,則得到的是正負負負這樣的,最優性顯然(?),也是變了更優的話之前就會變

左端點二分整塊,散塊直接合成一塊算,因為如果斷開后變成了多塊且無法合並,則加上原始塊的左邊后更無法合並(乘的系數變大,負號不變)

一些細節,[L,R]去掉L后剩下的系數可以整體/2,每個塊就從1開始了

當正塊>1e9時設為1e9+1,因為每次*2減不回去

還有注意是合並到得到負塊為止,因為就算前面是負的一個正塊合並上去也可以*2,更優

CF1508

A:找到0or1>=n的兩個,把相同0/1的合並剩下直接放,這樣可以少至少n,總<=3n

B:發現可以根據ai<ai+1和ai>ai+1分為0/1,則01就是K-1的二進制,把相鄰的0找出來中間直接構

C:先把補圖生成樹建出(同CF599Bhttps://www.cnblogs.com/gmh77/p/14678733.html),然后把剩下的邊補成生成樹,要把一條邊變為異或和x(分開顯然更劣),設原圖邊為黑補圖為白

若存在未加的白邊則顯然新代價=0,否則要么直接把一條白變為x,要么枚舉一條未加的黑邊,滿足樹上路徑中存在白邊,只需要把這條白邊設為x相當於斷掉,然后加上黑邊的代價

直接把最終樹的黑邊連起來,每次判斷是否在同一個塊內即可

D:假設要把一個環歸位,只需要固定一個點然后順序交換,這樣連出來放射狀

多個環就找到最低點極角排序,每次把相鄰在不同環的交換,換完后環就合並了,最后從最低點開始換,這樣是一個扇狀圖形

E:發現把一個點歸位后就是后續遍歷,先暴力O(n)標記求出邊的順序,然后找到第一個不等於后序遍歷的點x,則剩下部分的順序等於把<=x的刪掉后的先序遍歷,求出后判斷是否合法

合法要算次數,發現每個點都會先上后下,且下時一定在1,否則反證從1到該點由於沒有操作過所以單調增,若不在1則父親更小,會先操作父親

所以直接算往下的次數,就是用移了的點的深度和

F:

GDOI/聯合省選2021

D1T1:

枚舉左邊界,對於a<b的初始不翻,a>b的按a貪心翻,在掃的過程中會把一些a<b和一些翻了的a>b(按b排)強制翻轉,如果m不足就把翻了的a>b按a排序翻回去

一定不存在m+1后再主動翻的情況,因為翻了(a,b)后前面的a翻了沒用,后面的全翻完了否則不會到當前a,所以不用考慮

D1T2:

硬點1行1列為0,則剩下方案唯一,接着用行/列間隔加減即可構出所有合法解,因為可以把任意一組合法解通過操作把1行1列變為0,即得到了初始狀態,反之亦然

接着差分約束判斷

D1T3:

直接算,點y能被x算到的充要條件是xy強連通且存在環使得最小點>y,如果上面有點u<y由於xu強連通所以u會先被刪,因此必須要有>y的環,存在的話顯然不會在y之前刪掉,在正反圖上跑

考場直接用桶來搞dij,時間O(nm),由於用了vector所以很慢

實際上每次新加一條邊然后bfs,這樣一次是O(n+m)總O(n(n+m)),由於跑不滿所以可以過

D2T1:

向c-1/c+1的祖先連邊,每次倍增判斷,由於不好確定長度所以寫了整體二分+暴力來確定每個詢問,log^2

實際上直接點分然后維護f[i]表示i往上跳的min即可一個log

D2T2:

差分,從小到大確定,則當前max確定后前面的+b操作與現在二者無關,只與初始的a有關

所以設f[s,i,j]表示狀態s,max為i和為j的方案,每次貪心卡到剛好成為max即可最優且不重

時間O(2^n*m*n^2)

D2T3:

先n^2建出支配樹,則原圖上的邊一定是往下/返祖/終點在lca下一

所以新加x->y后變化路徑一定是1->x->y->u且不經過u的父親,大力討論后(lca外、lca其他子樹)發現充要條件是dp[lca]+2<=dp[u],dp是支配樹上深度

然后可以類似D1T1 nm分層bfs預處理,qlog詢問,總O(nm+qlog)

arc117

A:A-1/B-1個±1~1000,剩下用大數調

B:排序后等於對后綴操作,ans=Π(ai-(ai-1)+1)

C:經典把操作變為數,則發現(a+b)/2->c(%3意義下),lucas算組合數

D:把最后的E排序,則顯然只要滿足相鄰限制,而相鄰的最小值就是dis,所以等於把整棵樹遍歷一邊,從直徑開始走最小

E:想從下往上折線dp,發現是O(n^7),優化可以做到O(n^6)

題解做法是把上下兩半分開最后合並,每邊就不用枚舉層數,轉移直接枚舉加的點數,則新的段數可以算出來,方案數等於在段的間隔中放點,首尾放1擴展多的新加,中間放1合並放2擴展多的新加,最后變為放球問題

總復雜度O(n^5)

2021 計蒜之道 精英組 預賽 第一場 D

顯然有f[i]=f[i/2](偶),f[(i-1)/2]+f[(i+1)/2](奇),打表發現類似sbt,主要是求前綴max

再打表發現后面一定是01交替構造最優,枚舉上界卡位剩下交替,矩陣維護,要寫高精度

牛客挑戰賽49

A:map

B:枚舉最后非0位

C:從大往小貪心,用物品匹配人,並查集維護

D:回文=折半,討論中心在哪邊n/2然后暴力

E:問題等於求 A導出子圖邊-B導出子圖邊,A要minB要max,顯然等價於每條邊(u,v)的點u,v+0.5,交替選點求總和(同+1-1,不同0),排序選

F:由於是點權,可以發現等於每次任意異或兩個點,而且是二分圖所以異或后奇偶不變,算出奇數/偶數任選的答案即可

雖然數據非常離譜https://ac.nowcoder.com/discuss/642482?type=101&channel=-1&source_id=0

G:https://gmoj.net/senior/#main/show/6698

CF1485

A:顯然到√A了就只有兩次了,枚舉

B:與al,ar有關

C:卡了一下,發現滿足條件的是xb+x=a,即x=a/(b+1),且x為整數,所以a=x(b+1) (1<=x<b),此時恰好滿足a div b=a%b=x,枚舉b,則貢獻為min(b-1,x/(b+1)),討論+分塊

D:發現\(16*9*5*7*11*13=s=720720<=10^6\),黑白染色,黑色填s白色填s-a^4,打表發現a|s-a^4

E:發現下一層的兩個點中有至少一個的父親是上一層的點,分層做,設f[i]表示i的父親一定選的貢獻,轉移的兩個點都要更新,維護maxmin即可,注意轉移順序

F:設f[i]表示bi=Σaj的1~i答案,枚舉上一個k轉移,顯然只用從得到ai不同的max(k)轉移過來,用map維護

實際是b[i]=b[k]+s[i-1]-s[k]+a[i],得a[i]=s[k-1]+b[i]-s[i-1],所以把f[k]丟到s[k-1]上,維護Σf的值,fi硬點了i必是求和

關於最后的答案,可以在n+1處多加一個b[n+1]=0,答案就是f[n+1],因為f是求和,如果完全相同則和一定相同,不會影響,實際答案就是維護的Sum

agc053

A:上界是K=max(|ai-ai-1|),直接構造bj,i=(ai +j-1)/K,發現和剛好為ai且滿足限制

B:從中間往兩邊可撤銷貪心

C:發現一個排列的答案就是最小的d使得ai=max(a1~i,b1~i+d),因為可以把max超了的對位刪掉,總次數為d

考慮算貢獻,相當於一個序列每次刪一個或兩個,其中一個不能是最后的,則顯然刪完一次后面的是獨立的子問題,因此可以乘起來,預處理做到O(n)

D:

609. 【UR #20】金坷垃

分段,ans[i]=∫f[i],容斥為至少g[i],求出g后反演

gi=[y^i]Π(py+1),由於里面是二項式所以對Π(p+1)求高階導后就是gi乘上階乘

求定積分,維護拆開的二項式代入點值卷積,乘i的j次下降冪就用i!/(i-j)!

607. 【UR #20】跳蚤電話

確定排列后結果唯一,發現每個時刻不存在兩個黑點的lca為白點,設f[i]表示i子樹任意排列的方案,轉移枚舉第一個子樹前后綴和O(n)

609. 【UR #20】金坷垃

分段,ans[i]=∫f[i],容斥為至少g[i],求出g后反演

gi=[y^i]Π(py+1),由於里面是二項式所以對Π(p+1)求高階導后就是gi乘上階乘

求定積分,維護拆開的二項式代入點值卷積,乘i的j次下降冪就用i!/(i-j)!

607. 【UR #20】跳蚤電話

確定排列后結果唯一,發現每個時刻不存在兩個黑點的lca為白點,設f[i]表示i子樹任意排列的方案,轉移枚舉第一個子樹前后綴和O(n)

7049. 2021.04.07【2021省賽模擬】生命游戲(lifegame)

打表發現按x+y奇偶分類,把每一類的每個塊按最左端固定再旋轉45°,則變為每個矩形每次往右上擴一格

一共有n^2個時間段,每個時間段矩形覆蓋算一下即可插值,矩形覆蓋可以掃描線+標記永久化

7047. 2021.04.07【2021省賽模擬】染色(coloring)

注意是最終情況不同,設f[i,j]表示到第i行最后一個白色為j的方案

轉移如果選就全塗否則枚舉上一行非空的轉移,前綴和可以做到O(n^2)

7051. 2021.04.08【2021省賽】模擬 B 數據結構

可以直接分塊硬上,題解做法是按y分治,發現每次只用把R/B中權值最大的和其他的匹配的點對加進去即可,因為如果某個詢問的兩點都不是某段最大值,且兩邊都不能換(不同側),則同時換后又同側了

然后矩形二維數點,桶排樹狀數組

CF1503F. Balance the Cards

最終的情況可以看作若干條曲線,每條曲線用1表示順時針0表示逆時針(圖見官方題解),則有三種操作:

①1S1->10revS11

②1S1->11revS01

③1S1+1T1->1ST1

模擬即可,實現細節:

在合並曲線時用雙向鏈表維護最終序列,翻轉是因為把前面的0/1去掉后方向反了,所以要把序列反過來,遞歸記一下鏈表的方向

①②操作新增的兩個放的位置不同

③操作將S的最后一個和T的第一個合並,從鏈表中間插入(所以要維護方向)

Codeforces Round #712 (Div. 1)

A:把0變為)()()(,這樣顯然最優

B:黑白染色,黑放1白放2,如果一種放完了剩下的放剩下兩種,一定有解

C:xjb判然后fst了,排序后如果從最小的開始則顯然是\(\sum \max(0,a_i-\max(a_j+c_j))\),如果不是也可以構造得到:找到從最小的開始跳的關鍵點,從1開始時如果1不是關鍵點就清掉前面的非關鍵點然后從最小的開始跳,否則跳完后面的回來跳前面的

D:發現如果存在a,b使得ab同在[1,n]或[n+1,2n]則無解,因為此時一定會出現另一對在另一個區間的,這樣就不交了

把a排序,然后問題變為把一個序列f分成兩個下降子序列,每個分在1/2組里有代價

如果沒有代價就直接維護兩個端點貪心選,加上代價后把f按min(前)>max(后)分組,則每組內方案唯一

證明:設當前兩個端點為a,b(a<b),顯然a=min(前),若當前匹配到x且x<a<b,則必用a接x,否則將會變為b'<min(前)=a<max(后),后面一定接不上

E:顯然的結論:最終的圖不能同時存在從1行走藍到n行,或從1列走黃到m列的路徑,否則有格子會交

如果滿足其中一個畫一下發現像早苗開海,中間存在一條分界線把兩邊的黃色凸塊分開,且分解處無交,組合數算一下,都不滿足就端點相交

7046. 2021.04.05【2021省賽模擬】迷路深層(xor)

假題2

發現只需要把非樹邊產生的環考慮進去就可以湊出所有情況

回滾莫隊並查集線性基維護,時間兩個log

7045. 2021.04.05【2021省賽模擬】數學考試(sleep)

假題1

每個函數拆成-100~100的點順序連邊,中間連函數值相反數,約束就從u鏈的xv+D連向v鏈的xv

時間至少是O(n^6)

7044. 2021.04.05【2021省賽模擬】悄悄話(word)

建AC自動機,每新加一個串就用路上點的fail鏈更新,線段樹維護

PE394 Eating pie

一開始想硬點長度為1剩余為k,然后發現比較陰間

\[\large f(x)=\frac{2}{x}F(y)|_k^x-\frac{2}{x^2}(yF(y)|_x^k-G(y)|_x^k)+1\\ \large f(x)=\frac{2}{x}(F(x)-F(k))-\frac{2}{x^2}(xF(x)-kF(k)-G(x)+G(k))+1\\ \large f(x)=\frac{2}{x}(-F(k))-\frac{2}{x^2}(-kF(k)-G(x)+G(k))+1\\ \large f(k)=\frac{2}{k}(-F(k))+\frac{2}{k^2}kF(k)+1=1\\ \large f(x)=\frac{2}{x}(-F(k))-\frac{2}{x^2}(-kF(k)-G(x)+G(k))+1\\ \]

其實直接用題目的E就可以了,大概推導如下

\[\large E(x)=1+\frac{2}{x}\int_1^xE(y)dy-\frac{2}{x^2}\int_1^xyE(y)dy \\ \large x^2E(x)=x^2+2x\int_1^xE(y)dy-2\int_1^xyE(y)dy \\ \large 2xE(x)+x^2E'(x)=2x+2\int_1^xE(y)dy+2xE(x)-2xE(x) \\ \large 2E(x)+2xE'(x)+x^2E''(x)+2xE'(x)=2+2E(x) \\ \large x^2E''(x)+4xE'(x)=2 \\ \large \frac{1}{r1-r2}(x^{r1}\int x^{-r1-1}f(x)dx-x^{r2}\int x^{-r2-1}f(x)dx) \\ \large \frac{1}{3}(x^{0}\int x^{-1}f(x)dx-x^{-3}\int x^{2}f(x)dx) \\ \large \frac{1}{3}(2\int x^{-1}dx-2x^{-3}\int x^{2}dx) \\ \large \frac{1}{3}(2(\ln x+C_1)-2x^{-3}(\frac{1}{3}(x^3+C_2))) \\ \large \frac{2}{3}(\ln x+C_1)-\frac{2}{9}-\frac{2}{9x^3}C_2 \\ \large C_1=\frac{3}{2}, C_2=-1\\ ans=\large \frac{2}{3}\ln x+\frac{7}{9}+\frac{2}{9x^3} \\ \]

里面的積分是積分上界函數,$\int_1^x f(y)dy \(求導等於\)f(x)$,導兩次后得到二階非齊次歐拉方程

解法見https://wenku.baidu.com/view/b6477750ed3a87c24028915f804d2b160a4e864e.html

兩個單位根是-3,0(x^2E''+axE'+bE=f(x),a=1-r1-r2,b=r1r2),得到后代公式\(\large y=\frac{1}{r1-r2}(x^{r1}\int x^{-r1-1}f(x)dx-x^{r2}\int x^{-r2-1}f(x)dx)\)

注意兩次積分有常數項,代入E(1),E(2)可得到C1=1.5,C2=-1

6151. 【GDOI2019Day1模擬2019.4.28】星際穿越

容斥+多項式求逆

6150. 【GDOI2019Day1模擬2019.4.28】愛樂之城

nlnn求出兩個人的貢獻S1S2,則ans=ΣΠS1(ai)S2(gcd(ai))

類比n=Σφ(d),設S2(n)=ΣG(d),d|n,反演得到G,每次直接在約數處更新,每個位置乘上G求和,這樣一組就會合起來貢獻得到S2(gcd(ai))

不要寫vector

6149. 【GDOI2019Day1模擬2019.4.28】盜夢空間

建虛樹分類討論,在虛樹點的子樹就排序線段樹,在邊上就dij算出距離然后算一下,虛樹邊的點的兒子就找到分界點,上半部分線段樹下半部分倍增預處理

7006. 2021.03.11【2021省賽模擬】玩游戲(game)

結論:當max(已出現)<min(未出現)時,當前的人會選擇直接開,否則會換

如果滿足的話顯然之后怎么換都是比max(已)要優,所以一定會開

否則反證,若max(已)>min(未)且當前的人開了,后面的人根據歸納滿足上面的策略

一句話證明:如果當前的人的數字變大了,則前面一定存在比變大前更小的,這個人不斷換到最后一定會換到更小的

考慮對於一個排列a算答案,發現答案就是Σ[ai是后綴最小值],如果是的話后面怎么換都換不走,否則ai加進去后一定是當前的max(已開的是一段連續的+一個max),最后會被換走

所以答案就是Σ1/i,\(S_k(n)=\frac{-ln(1-x)}{(1-x)^{k+1}}\),求導推得\(kS_k(n)+\binom{n+k}{k}=(n+1)S_{k-1}(n+1)\),遞歸求解,k=0時n大就用歐拉常數算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM