BZOJ3507 Cqoi2014 萬用字元匹配

2022-03-27 03:32:50 字數 1499 閱讀 3440

必須要記住字串很好卡一不小心就o(n²),別問我為什麼這麼說.....qaq

這題首先滿足位數與字母兩個限制,那麼我們*分大塊?分小塊,求各塊hash值,同時預處理出來每個字串的字首hash這樣就可以o(1)對比了(千萬不要忘記hash字串對比的功能,我在考試的時候一腦抽就忘了......)

#include#include

#include

#include

#define hash(a) hash[a+2]

using

namespace

std;

typedef unsigned

long

long

ull;

const ull k=131

;ull std[

15][15],hash[100030],tool[100030

];int len,lon[130],l[15][15],z[130],y[130],l,r,lo[130

],n;

char s[100030

];bool over[130

];inline

bool blabla(int start,int

num)

void

pre()

if(s[i]=='?'

)

std[std[

0][0]][std[std[0][0]][0]]=std[std[0][0]][std[std[0][0]][0]]+tool[l[std[0][0]][std[std[0][0]][0]]++]*s[i];

}for(int i=1;i<=std[1][0];i++)

l+=l[1

][i];

l+=std[1][0]-1

;

for(int i=1;i<=std[0][0];i++)

if(std[0][0]!=1

)

}void

work()

hash(

0)=s[0

];

for(int j=1;j)

hash(j)=hash(j-1)+s[j]*tool[j];

if(blabla(0,1)==0

)

if(std[0][0]==1)continue

;

if(blabla(y[i]+1,std[0][0])==0

)

if(std[0][0]<=2)continue

;

int had=2

;

for(int j=z[i];j<=y[i];j++)

}if(had!=std[0][0

]) over[i]=1

; }

}void

print()

}int

main()

bzoj3507 Cqoi2014 萬用字元匹配

我們將題目輸入的那個含萬用字元的串,記為 萬用字元串 下面的檔名記為 檔名 檔名 數量很少可以依次查詢。我們先將 萬用字元串 以 為界,將 萬用字元串 分解,得到若干子串,記為 通配子串 我們將每個 通配子串 各建立乙個 ac自動機。而有的 通配子串 可能含 萬用字元,我們將再次按 為界,分解這個 ...

bzoj1257 CQOI 餘數之和

題目 time limit 5 sec memory limit 162 mb submit 2383 solved 1105 submit status discuss 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除...

BZOJ1818 Cqoi2010 內部白點

給定平面上的一些黑點,其它位置都是白點,乙個白點如果上下左右都有黑點就會變成黑點,求最終會有多少個黑點 就是求交點個數 離散化後,取出所有線段,然後沿任意乙個軸朝著乙個方向掃,然後把平行於另乙個軸的線段用端點記錄,掃到一端就在樹狀陣列裡 1,另一端 1,樹狀陣列求個區間和貢獻答案即可 const m...