luogu P4173 殘缺的字串(坑)
背景:
FFT的字串假題。
題目傳送門:
https://www.luogu.org/problemnew/show/P4173
題意:
定義
∗表示一個任意字元,求一個字串從哪裡開始能在模式串完全匹配。
思路:
考慮轉化為數字問題。
另
0表示
∗,
1表示字元
a,
2表示字元
b…
考慮一一對應。
那麼假設兩個位置匹配,就會有
∣ai−bi∣=0或
ai=0或
bi=0,就可以表示為:
(ai−bi)2aibi=0
展開化簡得: ai2∗aibi+bi2∗aibi−2aibi∗aibi=0
ai3bi+aibi3−2ai2bi2=0
不妨設
b′為
b反向取後的序列,則有:
ai3bn−i+aibn−i3−2ai2bn−i2=0
發現是三個
FFT卷積的形式,不妨用
FFT來加速即可。
程式碼:
相關推薦
luogu P4173 殘缺的字串(坑)
背景: FFT的字串假題。 題目傳送門: https://www.luogu.org/problemnew/show/P4173 題意: 定義 ∗
[Luogu P4173] [BZOJ 4259] 殘缺的字串
洛谷傳送門 題目描述 很久很久以前,在你剛剛學習字串匹配的時候,有兩個僅包含小寫字母的字串AAA和BBB,其中AAA串長度為mmm,BBB串長度為nnn。可當你現在再次碰到這兩個串時,這兩個串已經老化
洛谷P4173 殘缺的字符串(FFT)
htm 字符 說明 腦洞 problem tmp d+ hellip sin 傳送門 話說為什麽字符串會和卷積扯上關系呢……到底得腦洞大到什麽程度才能想到這種東西啊……大佬太珂怕了…&hellip
P4173 殘缺的字符串
tle 個數 -o2 its push turn 構造 get c++ \(\color{#0066ff}{ 題目描述 }\) 很久很久以前,在你剛剛學習字符串匹配的時候,有兩個僅包含小寫字母的字符串\(A\)和\(B\),其中\(A\)串長度為\(m\),\(B\)串長度
P4173 殘缺的字符串(FFT)
problem ons cout har tchar pri amp show struct [Luogu4173] 題解 \(1.\)定義匹配函數 \(2.\)定義完全匹配函數 \(3.\)快速計算每一位的完全匹配函數值 #include<cstdio> #i
noip提高組2002 字串變換(luogu P1032 )
log pla logs struct mil == main include ron 原題鏈接:https://www.luogu.org/problem/show?pid=1032 對於此題,我只想說,string雖然慢,但是功能太強。 還有,map大法好,不但跑的飛快
luogu P1032 字串變換
algorithm nbsp ont 三次 log namespace 例如 blog != 題目描述 已知有兩個字串 A, B 及一組字串變換的規則(至多6個規則): A1 -> B1 A2 -> B2 規則的含義為:在 A$中的子
LUOGU P1039 偵探推理 (字串+模擬)
傳送門 解題思路 一道%你神題,\(string\)好強大啊。。首先列舉一個周幾,再列舉一個罪犯是誰,然後判斷的時候就是列舉所有人說的話。定義\(fAKe[i]\)表示第\(i\)個人說的是真話還是假話還是未知。然後如果遇到\(xx is guilty\)或\(I am guilty\)之類的話,就看
js byte陣列與16進位制字串互轉(對負值填坑)
//十六進位制字串轉位元組陣列,跟網上demo一樣 function HexString2Bytes(str) { var pos = 0; var len = str.length; if (len % 2 != 0) { &
Luogu P3375 【模板】KMP字串匹配
題目描述 如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。 為了減少騙分的情況,接下來還要輸出子串的字首陣列next。 (如果你不知道這是什麼意思也不要問,去百度搜[kmp演算法]學習一下就知道了。) 輸入輸出格式 輸入格式:
【 CodeForces - 864B】Polycarp and Letters(水題,字串,有坑)
題幹: Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string sconsisting only of lowercase and uppercase Latin lett
js 字串數值比較的坑
最近在做公司oa前端驗證的時候出現一個奇葩問題,問題是年假天數和請假天數兩個值比較再數值等於和大於10的時候 兩者驗證有出問題如年假天數為 10 我請假天數為5 相互比較就會出問題 由於這程式碼直接在前人手裡copy過來的 只是將控制元件id一改 再加上前端程式碼封裝了 我也
es6 入坑筆記(一)---let,const,解構,字串模板
let 全面取代var 大概相似於C++的定義,一個變數必須得先定義後使用,沒有預編譯 注意let的作用域,一個{}就是一個作用域,上述規則須在一個作用於內 坑:for(let i =0;i < 10; i++){ let i=20; } 這
使用for迴圈遍歷字串時迴圈變數型別的坑
通常情況下,使用for迴圈可以通過遞增,也可以通過遞減,使用遞減遍歷程式碼如下: - (void)testFor { NSString *string = @"信不信由你"; for (int i = string.length - 1; i >= 0;
【新坑】開啟luogu的奇妙之旅?笑:P1089津津的儲蓄計劃
鑑於我的水平之低,現行luogu出發!?let's go! \ 水題p1089 #include<iostream> int main(){ int money=0,cunchu=0; for(int i=1;i<=12;i++){
【CodeForces - 151D】Quantity of Strings (字串問題,思維推導,有坑)
題幹: Just in case somebody missed it: this winter is totally cold in Nvodsk! It is so cold that one gets funny thoughts. For example, let's say the
2018.11.17 bzoj4259: 殘缺的字串(fft)
傳送門 f f t fft
【BZOJ4259】殘缺的字串
題面 1684 -- 【BZOJ4259】殘缺的字串 Description 很久很久以前,在你剛剛學習字串匹配的時候,有兩個僅包含小寫字母的字串A和B,其中A串長度為m,B串長度為n。可當你現在再次碰到這兩個串時,這兩個串已經老化了,每個串都有不同程度的殘缺。 你想對這兩個串重新進行匹配,其中A為模
bzoj 4259 4259: 殘缺的字串【FFT】
和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一個原串字元 有點卡常,先在點值下算最後一起IDFT #include<iostream> #include<cstdio> #include<
BZOJ 4259 殘缺的字串
f [ i ]