必須要記住字串很好卡一不小心就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...