jzoj5813 計算 二分 hash

2021-08-23 12:26:10 字數 1050 閱讀 2834

兩個串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 ...