原创 F - Mr. Panda and Fantastic Beasts Gym - 101194F

題解:對於每個字符串後面加一個特殊符號把所有的串連接在一起,然後在後綴數組中找到後綴的位置出現在第一個串,對於這個串找到前後最近的不是第一個串的字符串,取height數組前後區間最小值的最大值,如果後綴小於第一個串中以i爲起點的後綴長度,

原创 E - Rainbow Roads Kattis - rainbowroads

題解:點分治枚舉任意兩點爲端點的路,判斷路是否是正確的,計算重心爲根的樹,暴力跑子樹,看子樹是否有從根到子樹上的點的路有錯誤,標記這個點,標記這顆子樹,如果有多顆子樹被標記,那麼這整顆樹都標記上,如果只有一顆子樹被標記,那麼除這顆子樹之外

原创 Gym 102428G Gluing Pictures

題解:其實就是在找最少需要多少原串中的子串構成詢問串,SAM進行匹配就行了。 代碼: #include <bits/stdc++.h> using namespace std; const int maxn=2e5+5; int len

原创 Gym 102428L Leverage MDT

題解:如果滿足給定條件的正方形,只要正方形的每一行中都爲相同的就行了,不用管是否是good土地,因爲可以使用MDT對於每一行進行轉換。預處理,對於每一行的每一個位置,如果這一行當前位置和前一個位置是不同的那麼這個位置就爲1,對於每一個正方

原创 K - Addition Robot CodeForces - 1252K

題解:對於線段樹上的一段,Ax=x*a1+y*b1 , Bx=x*a2+y*b2, x,y爲初始給的A,B值,Ax,Bx,爲操作完這一段的結果值,如果線段樹上兩段合併前一段的Ax爲後一段的x,前一段的Bx爲後一段的y,帶入結果就算出兩段合

原创 K - Kingdom of Ants Kattis - kingdomofants

題解:線段樹掃描線求面積交,維護區間修改次數爲0的和區間次數爲奇數和偶數的,偶數的個數減去爲0的個數就是面積交爲偶數個矩陣。 代碼: #include <bits/stdc++.h> using namespace std; typed

原创 G. Indie Album

題解: 字典樹原本的串,ac自動機詢問的串,預處理答案,樹鏈剖分+樹狀數組處理fail樹,dfs尋找所有串,統計答案。 代碼: #include <bits/stdc++.h> using namespace std; const in

原创 J. Random Access Iterator

題解:想如果到達某個點往下走能走到一次的錯誤概率,只要有一次對就是對的,所以求出全部錯的概率,所以這個點往下走的正確概率爲1-全部錯誤概率。結果就是根節點往下走正確的概率。 代碼: #include <bits/stdc++.h> us

原创 A - Artwork Gym - 101550A

題意:給你n*m個格子每次添加一條黑線,問這些黑線將白格子分成幾個部分。 題解:首先將全部黑線塗上,將每個格子標記在那個塊上,對於詢問從後往前刪除,並將刪除之後的白格子賦值爲新的塊,然後並查集合並,結果就是這次詢問的塊數。 代碼: #i

原创 The beautiful values of the palace

題目鏈接:https://nanti.jisuanke.com/t/41298 題目大意:給一個n*n的矩陣,矩陣的值成螺旋狀,找到m個格子,每個格子的值爲原先數字的位數和,其他的全爲0,詢問p次給定矩陣的權值。 題解:首先快速求出這個點

原创 K-th occurrence

題意: 給定區間 [l,r] 和 k,求和區間 [l,r] 相同的串的第k個位置在哪? 題解:利用後綴數組求出height數組,因爲排名相近的兩個串是最想像的串,所以st表求區間最小值,找到字符相同的串的區間,然後利用主席樹存sa值求第k

原创 Rikka with Travels

題意:求出兩條不相交的路的不同長度對。 題解:換根dp維護最長、次長、次次長鏈,維護子樹的直徑和子樹的次長直徑,線段樹區間更新,單點查詢。   代碼: #include <bits/stdc++.h> #define ls x<<1 #

原创 J - Deciphering Oracles Gym - 101492J

題意:1~n之間的數字重新排序,排序規則是:如果x<y (x的位數求和小於y的位數求和,或者x的位數求和等於y的位數求和且x<y)。 題解:數位dp求n的位數和小於sum的個數,對於第一個答案,我們首先求出k的位數和ans,然後求出k在a

原创 C - Coprimes Gym - 101492C

題意:給你一個長度爲n的序列,給你m次詢問區間 [l,r] ,回答區間內是否有一對互質的數。 題解: 首先素數篩,開素數篩個bitset,bitset的每一位對應序列的每一位。從後往前循環,維護兩個bitset,a清空,b每次循環都把後一

原创 菜菜種菜

題目鏈接:https://www.cometoj.com/contest/58/problem/D?problem_id=2758   題解:對於每一個點維護離它最近的左右點,然後對於每次詢問,標記而且按照r排序。樹狀數組維護每一點爲左端