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,然后發現比較陰間
其實直接用題目的E就可以了,大概推導如下
里面的積分是積分上界函數,$\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大就用歐拉常數算