原创 kmp&擴展kmp&manacher 學習

kmp: 求出模式串在文本串中第一次出現的位置 O(n+m) 擴展kmp: 求出模式串與文本串中每個i爲下標的後綴串的最長公共前綴 extend[i] O(n+m) manacher:求出母串中的最長迴文子串O(n)  kmp模板: #

原创 2019杭電多校第六場(C/E)

C:求出本質不同的迴文串中能構成一個串爲另一個串的子串所有字符串對的pair數 做法: 考慮每個點和他的fail點的貢獻 , 在偶迴文樹和奇迴文樹上分別dfs, 求出該點和他的子節點的size, 然後該點的貢獻就等於該點和他的fail點的

原创 杭電多校第二場 I Love Palindrome String (Pam+Hash)

給你一個字符串,問長度爲0~|s| 滿足l~r爲迴文串 並且l~(l+r)/2 也爲迴文串的數量 由題意可知如果長度爲偶數則 需要滿足l~(l+r)/2 == (l+r)/2+1~r 如果長度爲奇數則需要滿足l~(l+r)/2==(l+r

原创 Codeforces Round #577 (Div. 2) D(DP)

給你一張n*m個的表格 和k個點有寶藏, 以及只有b列的位置可以往上走,在其他列只能往左或者往右走,每次只能往左往右或者往上選擇一個方向走一格,問從(1,1)找到所有寶藏最少需要多少步 做法: 考慮走完每層所有有寶藏的時候,必然是位於最左

原创 BZOJ 4892 DNA (sa+暴力)

給你一個母串 和 一個子串 問母串中有多少個子串更改不超過三個字母 可以和子串相匹配。 做法: 把母串和子串連起來建sa數組 然後 對母串的開頭 和子串的開頭進行枚舉,如果首字母相同則求下一個跳到當前位置+lcp(母串當前位置,子串當前位

原创 Educational Codeforces Round 73 (Rated for Div. 2) D(dp)

D 給你n個點的初始值,和每個點提升1所需要的代價,問最少需要代價能夠使任意相鄰的兩個點的值不同。 結論1, 每個點的提升值不超過2   例如 4 4 5  中間的4最多提升到6  那麼對於每個點我們有三個狀態 +0 +1 +2 ,下一個

原创 序列自動機學習

序列自動機一個可以n*(字符集)的複雜度預處理出字符串第i位及以後第一次出現大於字符j的位置 原理 if x>j  dp[i][j]=i;        else dp[i][j]=dp[i+1][j]; #include<iostre

原创 2019徐州icpc網絡賽補題

G :給你一個字符串求所有的迴文子串中不同種類字母的數量(每個迴文子串單獨計算) 做法首先建立迴文樹,並求出與每個節點i迴文串出現的次數,然後分別在偶節點0和奇節點0跑dfs, dfs的點來自next樹,邊表示字符串c,節點表示迴文子串,

原创 迴文樹/迴文自動機學習

len[i]:節點i的迴文串的長度 next[i][c]:節點i的迴文串在兩邊添加字符c以後變成的迴文串的編號 fail[i]:指向i的最長迴文後綴且不爲i cnt[i]:節點i表示的迴文串在S中出現的次數(建樹時求出的不是完全的,cou

原创 2019南京網絡賽A 題解

首先O(1)算出 m個點的對應的beauty值,然後就變成了一個二維數點問題,在一個n*n的矩陣上,有m個點,q個詢問 每次詢問一個矩陣內的值之和。由於n的範圍爲1e6,二維樹狀數組加離散化或者二維前綴和加離散化開不下,如果用map存pa

原创 ac自動機學習

模板: #include<bits/stdc++.h> using namespace std; const int N=500005; struct ac_automation { int trie[N][26]; i

原创 2019牛客多校第九場題解(D/E/J)

D 給你最多36個數和 一個定值s,找一個子集使這些數的和爲s 做法 將集合分成兩個部分,先對右邊部分用二進制數枚舉選取情況,然後求和之後用map存下來,鍵值爲值,值爲對應的二進制數 然後對左邊部分用二進制數枚舉選舉情況,求和後用s-su

原创 2019牛客第十場題解(C/F)

C 題意:第i天在原來字符串的基礎上在字符串的前面或者後面添加一個字符。問添加完字符後有多少種不同長度的循環節。 定義循環節爲能把原字符串分割成長度爲k的一個或多個部分。並且後面可以有或者沒有循環節的開頭部分。 也就是說 s[1]~s[n

原创 2019牛客多校第八場題解(A)

A 給你一個n*m的01矩陣,求出所有最大全1矩陣的數量,保證任意兩個矩陣不相互包含。 考慮單調棧求最大矩形面積的做法。 對於矩陣 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 我們先預處理h[i][j]

原创 2019杭電多校第六場(E)

E:Snowy Smile 題意 以座標的形式給你n個點的位置 和值 求最大子矩陣和 -1e9<=x[i],y[i],a[i]<=1e9。 參考to the max 的做法固定一維 枚舉另一維,但是 如果求最大字段和的地方跑dp 肯定要n