兩個串s,t拼起來是回文串一定滿足將t翻轉後,有lcp(s,t』)=min(|s|,|t|),且剩餘不同的部分是回文串
考慮樸素做法。我們列舉lcp長度,若剩下串為回文串則產生1的貢獻
優化這個暴力。注意到我們僅需找到以每個位置為中心的最長回文子串,因此只需要預處理每乙個串的所有回文字串,對於[l,r]的區間整體+1記為f。考慮二分每次詢問的lcp長度,答案就是我們統計的f的區間和+lcp長度
字串hash像玄學一樣得分取決於模數(lll¬ω¬)
#include
#include
#include
#define rep(i,st,ed) for (register int i=st;i<=ed;++i)
#define drp(i,st,ed) for (register int i=st;i>=ed;--i)
#define fill(x,t) memset(x,t,sizeof(x))
typedef
long
long ll;
const
int mod=998244353;
const
int n=800005;
ll p[n];
struct
string
ll suf(int l,int r)
void pal(int x,int y)
f[x-ret]++; f[x+1]--;
}void init(bool rev)
rep(i,1,len) f[i]+=f[i-1];
rep(i,1,len) f[i]+=f[i-1];
}} a,b;
int read()
int lcp(int x,int y)
return ret;
}int main(void)
return
0;}
JZOJ 二分 抄書
與書的複製差不多 洛谷 書的複製 但是只要輸出最大的時間 樣例輸入9 3 100 200 300 400 500 600 700 800 900樣例輸出1700樣例解釋1 1500 100 200 300 400 500 2 1300 600 700 3 1700 800 900 1300 1500...
二分 抄書 (jzoj 2123)
有n本書,分給m個人抄,每個人只能拿到連續的書 不能把一本書分開 問抄書最多的人要抄多少頁9 3 100 200 300 400 500 600 700 800 9001700對於10 的資料,有n 10 對於50 的資料,有n 500 對於100 的資料,有n 3000 這道題很可能想到dp但會炸...
暴力 二分答案 JZOJ 蛋糕
有乙個n m n mn m的蛋糕 有數字 橫著切三刀在豎著切三刀分成16份使最小的最大。首先 最小的最大 確定了這題可以二分答案 這題我們先暴枚豎切三刀,再二分判定 include include include using namespace std int n,m,rr,ans,l,r int ...