GDKOI2014 JZOJ3572 基因模式

2021-07-30 15:01:02 字數 1343 閱讀 2277

給定乙個模板串

t ,字符集為。 有

q 個詢問,每次給出乙個串

s,字符集也只是上面四個字母,還會給定字符集中某些字母的奇偶性限制,詢問

s 中一共有多少個子串滿足以下兩個條件:

∙這個串是

t 的乙個子串

∙對於給定了奇偶性限制的字母,該串中中該字母出現的次數奇偶性要滿足這個限制1≤

|t|≤

105,∑

|s|≤

105,q

≤103

對t 串構造字尾自動機,然後拿詢問串在上面跑。

對於詢問串的乙個位置

i假設我們在sam上匹配到了節點

p ,任選ri

ghtp

中的任意乙個節點作為右端點

r ,可能的答案串左端點在區間[r

−mat

chle

n+1,

r]內,現在我們要滿足奇偶性限制。

既然字符集大小為

4 ,考慮使用

4位二進位制狀態來表示每個字元出現次數的奇偶性,我們處理一下字首和減一減就可以得到

i 對答案的貢獻。

時間複雜度o(

|t|+

2|σ|

|s|)

#include 

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int n=100050;

const

int w=4;

const

int s=1

int v=n<<1;

int sum[n][s],pre[n];

int pur,cor;

namespace sam

sam[v];

int tot,root;

int newnode()

void init()

int insert(int lst,int c,int ps)

return np;

}int match(int &p,int c,int &len)

};char t[n],str[n],l[10];

int id[26];

int n,m,q;

int main()

for (ll ans;q--;printf("%lld\n",ans))

fclose(stdin),fclose(stdout);

return

0;}

GDKOI2014模擬 樹的直徑

並不想講。樹的直徑有乙個性質。現在有兩棵樹,如果把它們隨意連一條邊,會變成一棵樹,新樹的直徑的端點一定是之前兩棵樹的直徑的共4個端點的兩個。code include include define fo i,x,y for int i x i y i define fd i,x,y for int i...

GDKOI2014 石油儲備計畫

description input output 對於每組資料,輸出乙個整數,表示達到 平衡 狀態所需的最小代價。sample input 2 36 1 5 1 2 1 2 3 2 54 5 4 3 2 1 3 1 1 2 2 2 4 3 2 5 4 sample output 4 4樣例解釋 對於...

GDKOI2014 石油儲備計畫

description input output 對於每組資料,輸出乙個整數,表示達到 平衡 狀態所需的最小代價。sample input 2 36 1 5 1 2 1 2 3 2 54 5 4 3 2 1 3 1 1 2 2 2 4 3 2 5 4 sample output 4 4樣例解釋 對於...