BZOJ4259殘缺的字串

2022-07-13 19:36:19 字數 1026 閱讀 7927

題目描述

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

你想對這兩個串重新進行匹配,其中a為模板串,那麼現在問題來了,請回答,對於b的每乙個位置i,從這個位置開始連續m個字元形成的子串是否可能與a串完全匹配?

題解

帶萬用字元的字串匹配問題。

我們先把萬用字元設為0,考慮如果匹配串中的一段和模式串完全匹配,那麼必然滿足∑(a[i]-b[i])^2*a[i]*b[i]=0。

很容易發現這是個卷積,那麼把任意乙個串倒過來fft一下就好了。

這題還卡我精度。。。

**

#include#include

#include

#include

#include

#define n 600002

#define double long double

using

namespace

std;

typedef

long

long

ll;int

l,l,n,m,rev[n],ans[n];

char

s1[n],s2[n];

const

double pai=acos(-1.0

);struct

fs fs

operator +(const fs &b)const;}

fs operator -(const fs &b)const;}

fs operator *(const fs &b)const;}

}a[n],b[n],c[n],d[n],e[n];

inline

void fft(fs *a,int

tag)}}

}int

main()

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 ...

BZOJ4259 殘缺的字串

其實大部分字串的題都可以用多項式來想,包括這道題。於是,我們可以嘗試去構造兩個多項式,使其乘後的係數為0即可。相等為0,那麼我們可以用減法表示。可 可以匹配所有的符號,我們又該咋辦?那不就相當於乘個0嘛。於是,我們得到了下式 然後就可以卷積計算了。include include include in...

bzoj 4259 殘缺的字串

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