【BZOJ】4259: 殘缺的字符串
【題意】給定長度為m的匹配串B和長度為n的模板串A,求B在A中出現多少次。字符串僅由小寫字母和通配符" * "組成,其中通配符可以充當任意一個字符。n<=3*10^5。
【算法】FFT
【題解】假設模板串的數組A用0~26代表所有字符,0為通配符,匹配串的數組B同理,那麽用表示差異的經典套路:
$$C_n=\sum_{i=0}^{m-1}(A_{n+i}-B_i)^2*A_{n+i}*B_i$$
那麽可以看出$C_n=0$當且僅當$S_A[n,n+m-1]=S_B[0,m-1]$。這裏的通配符為0,所以當含有通配符時式子直接為0,即無差異。
嘗試擴展上屆,由於:
$$B_i=0,i\in[m,n]$$
所以可以得到:
$$C_n=\sum_{i=0}^{n}A_{n+i}^3B_i-2A_{n+i}^2B_i^2+A_{n+i}Bi^3$$
這就是標準的卷積形式了,將其中一個數組反轉即可。
復雜度O(n log n)。
【BZOJ】4259: 殘缺的字符串
相關推薦
【BZOJ】4259: 殘缺的字符串
題解 個數 題意 裏的 就是 嘗試 -s span 字符 【題意】給定長度為m的匹配串B和長度為n的模板串A,求B在A中出現多少次。字符串僅由小寫字母和通配符" * "組成,其中通配符可以充當任意一個字符。n<=3*10^5。 【算法】FFT 【題解】假設模板串的數組
【C】常用的字符串函數
uri 實例 返回 blog logs tin bsp main include 1. strcpy 函數名:strcpy 用法:char *strcpy(char *destin, char *cource) 功能:將一個字符串從一個拷貝到另外一個 程序示
【PowerShell】格式化輸出字符串
-m date 大寫 shell class 輸出 方式 style 格式化輸出 1 ‘{0:d4}‘ -f 10 2 ‘數字的補零‘;{} 3 ‘{0:f4}‘ -f 10 4 ‘保留小數位數‘;{} 5 ‘{0:p2}‘ -f 0.4567 6 ‘轉換為百
【python】判斷一個字符串是否是數字
val imp erro not 判斷 數字 try false urn def is_number(s): try: float(s) return True except ValueError: pass try: impo
【洛谷P1641】[SCOI2010]生成字符串
個數 ati es2017 name span thml www 生成 n) 題目描述 lxhgww最近接到了一個生成字符串的任務,任務需要他把n個1和m個0組成字符串,但是任務還要求在組成的字符串中,在任意的前k個字符中,1的個數不能少於0的個數。現在lxhgww想要知道
洛谷 P1217 [USACO1.5]回文質數 Prime Palindromes【取回文數/數論/字符串】
判斷素數 play opened 這樣的 dig digi esp 長度 word 題目描述 因為151既是一個質數又是一個回文數(從左到右和從右到左是看一樣的),所以 151 是回文質數。 寫一個程序來找出範圍[a,b](5 <= a < b <=
【劍指offer】左旋轉字符串,C+實現
ews 試用 name DC http ref tst solution otto 原創博文,轉載請註明出處! 本題牛客網地址 本題代碼的github地址 本系列文章的索引地址 # 題目 # 思路 先局部翻轉,後整體翻轉。舉例:abcdefg先局部翻轉為bag
【將文件中字符串賦值到 ArrayList 中】
print buffere buffer for 字符 pack 賦值 created adl package com.companyname.common.test; import java.io.BufferedReader; import java.io.File
【LeetCode每天一題】Multiply Strings(字符串乘法)
bject 長度 must you n) 空間復雜度 use strong start Given two non-negative integers num1 and num2 represented as strings, return the product of n
【洛谷】訓練場_字符串處理
des 另一個 b+ 開頭 利用 count ide 函數 舞蹈 P1071潛伏者 題意: 輸入共三行,每行為一個長度在1到100之間的字符串,第1行為一條加密信息,第2行為第1行的加密信息所對應的原信息,第3行則是要求翻譯的加密信息。比如 第一行:ABA 第二行:
Python自動化開發課堂筆記【Day03】 - Python基礎(字符編碼使用,文件處理,函數)
賦值 創建 解釋器 使用 重復 closed 操作 邏輯 默認 字符編碼使用 1. 文本編輯器如何存取文件 文本編輯器相當一個運行在內存中的進程,所以文件內容在編輯未存儲時都是在內存中的,尚未存儲在硬盤之中,在沒有保存之前,所編輯的任何文本都只是一堆字符,沒有任何邏輯上的意
【BZOJ】3676 [Apio2014]回文串
esp ret 結點 += lap first trees db4 lld 【算法】回文樹 【題解】建回文數,然後一個回文子串出現的次數就是結點被訪問的次數以及能包含它的結點被訪問的次數。 根據fail樹反向建新樹,那麽答案就是結點所在子樹的權值和(權值就是結點被訪問次數)
【BZOJ】3676: [Apio2014]回文串
turn 算法 view 價值 using open 技術 con src 【題意】給定只含小寫字母的字符串s,定義價值為回文子串的長度*出現次數,求最大價值。n<=3*10^5。 【算法】回文樹 【題解】回文樹上一個點的被訪問次數是其作為最長回文子串的出現次數。 將
【BZOJ4566】找相同字符(後綴自動機)
print tdi iostream extend 當前位置 字符 map 自動 code 【BZOJ4566】找相同字符(後綴自動機) 題面 BZOJ 題解 看到多串處理,\(SA\)就連起來 \(SAM???\) 單串建自動機 然後其他串匹配 對於一個串建完\(SAM\
【BZOJ4566】找相同字符(後綴數組)
cpp href online main void div fine 處理 eight 【BZOJ4566】找相同字符(後綴數組) 題面 BZOJ 題解 後綴數組的做法,應該不是很難想 首先看到兩個不同的串,當然是接在一起求\(SA,height\) 那麽,考慮一下暴力 在
Learing-Python【8】:Python字符編碼
自己 什麽 文件的 二階 pychar 不同 編碼 能夠 打開 1、內存和硬盤都是用來存儲的 內存:速度快 硬盤:永久保存 2、文本編輯器存取文件的原理(nodepad++,pycharm,word) 打開編輯器就可以啟動一個進程,是在內存中的,
【BZOJ4566】找相同字符【後綴自動機】
std clone init 並且 div isp ++ typedef click 題意 給定兩個字符串,求兩個字符串相同子串的方案數。 分析 那麽將字符串s1建SAM,然後對於s2的每個前綴,都在SAM中找出來,並且計數就行。 我一開始的做法是,建一個u和
bzoj 4259 4259: 殘缺的字符串【FFT】
name html .html code using sin char s iostream 就是 和bzoj 4503 https://www.cnblogs.com/lokiii/p/10032311.html 差不多,就是再乘上一個原串字符 有點卡常,先在點值下算最後
【BZOJ4259】 殘缺的字符串
can isp efi amp inpu 包含 define typedef ans Description 很久很久以前,在你剛剛學習字符串匹配的時候,有兩個僅包含小寫字母的字符串A和B,其中A串長度為m,B串長度為n。可當你現在再次碰到這兩個串時,這兩個串已經老化
【字符串】BZOJ上面幾個AC自動機求最為字串出現次數的題目
參考 none ac自動機 其他 view lose 細節 pen max (一下只供自己復習用,目的是對比這幾個題,所以寫得不詳細。需要細節的可以參考其他博主) 【BZOJ3172:單詞】 題目: 某人讀論文,一篇論文是由許多(N)單詞組成。但他發