BZOJ4259 殘缺的字串

2021-10-02 10:27:15 字數 991 閱讀 4586

其實大部分字串的題都可以用多項式來想,包括這道題。

於是,我們可以嘗試去構造兩個多項式,使其乘後的係數為0即可。

相等為0,那麼我們可以用減法表示。

可『*』可以匹配所有的符號,我們又該咋辦?那不就相當於乘個0嘛。

於是,我們得到了下式:

然後就可以卷積計算了。

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define int ll

#define gc() getchar()

templatevoid read(_t &x)

while(s>='0'&&s<='9')

x*=f;

}template_t fabs(_t x)

const int maxn=1200005;

const double pi=acos(-1.0);

const double eps=1e-9;

int rev[maxn];

struct complex

complex operator + (complex b)

complex operator - (complex b)

complex operator * (complex b)

complex operator * (double b)

complex operator / (double b)

}a[maxn],b[maxn];

void fft(int lim,complex *x,int typ)

printf("%d\n",ansi);

for(int i=1;i<=ansi;i++)printf("%d ",ans[i]);

return 0;

}

BZOJ4259 殘缺的字串

給出兩個字串,乙個模式串,乙個匹配串,問匹配串中哪些位置可以匹配上模式串,其中 可以作任意字元。這個可以轉化為多項式,我們可以把 看作0,其他字母看作各個數字,然後發現如果兩個字串相同,當且僅當 i 0n 1 a i b i 2 a i b i 0 sum 0 i 0n 1 a i b i 2 a ...

bzoj 4259 殘缺的字串

這題好神啊,居然是fft,表示一直在往資料結構上想。把 當成0,那麼兩個串可以匹配當且僅當 sum a i b i 2 times a i times b i 0 我們可以把平方拆開,然後就變成了幾個乘積相加的形式,那就大力翻轉乙個串然後跑fft。因為最開始mle了所以複製貼上了好多東西。1 inc...

Bzoj4259 殘缺的字串

time limit 10 sec memory limit 128 mb submit 387 solved 93 很久很久以前,在你剛剛學習字串匹配的時候,有兩個僅包含小寫字母的字串a和b,其中a串長度為m,b串長度為n。可當你現在再次碰到這兩個串時,這兩個串已經老化了,每個串都有不同程度的殘缺...