日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day10T1改错记

發(fā)布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day10T1改错记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題面

有兩個串\(A\)\(B\),長度分別為\(n\)\(m\),只含'Z','P','S','B'四個大寫字母,定義\(B\)在第\(p\)位(\(0 \le p \le n - m\))匹配\(A\)為對\(B\)的每個位置\(B_i\),在\(A_{\max (0, p + i - k)}\)\(A_{min(n - 1, p + i + k)}\)中都存在與\(B_i\)相同的字符,現(xiàn)給出\(A\)\(B\)\(k\),問\(B\)在多少個位置和\(A\)匹配

題外話

怕是幾天來改得最快的一道題了……

解析

只有四個字母,就考慮分開處理

枚舉每個字符

設(shè)\(a_i\)表示\(A\)串的第\(i\)個位置能不能匹配這個字符,\(b_i\)表示\(B\)串的第\(i\)個位置是否是這個字符(\(a_i, b_i\)都是\(0/1\))

那么\(p\)位置能匹配的位置數(shù)量就是\(\sum_{i = 0}^{m - 1} b_i \cdot a_{p + i} = \sum_{i = 0}^{n - p - 1} b_i \cdot a_{p + i}\),上界可以擴展因為\(m - 1\)之后的位置\(b\)\(0\),不會影響結(jié)果

設(shè)這個式子為\(f(p)\),把\(a_i\)翻轉(zhuǎn)一下,即\(g(i) = a_{n - 1 - i}\),那么:
\[ \begin{align} f(p) & = \sum_{i = 0}^{n - p - 1} b_i\cdot a_{p + i} \\ & = \sum_{i = 0}^{n - p - 1} b_i \cdot g(n - p - 1 - i) \end{align} \]
然后把\(f\)翻轉(zhuǎn),得到:
\[ f(n - 1 - p) = \sum_{i = 0}^{n - p - 1} b_i \cdot g(n - p - 1 - i) \]
這不就是個卷積嗎,\(FFT\)或者\(NTT\)都可以做

對每個字符求出各個位置能匹配的數(shù)量,顯然只有當一個位置各個字符匹配數(shù)量的和為\(m\)的時候\(B\)才能在這個位置匹配\(A\),最后判一下統(tǒng)計答案就行了

代碼

#include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <algorithm> #define MAXN 200005typedef long long LL; const int mod = 998244353; const char set[] = {'Z', 'P', 'S', 'B'};int qpower(int, int, int); void pre_rev(int); void NTT(int *, int, int);int K, n, m, ans, match[MAXN], rev[MAXN << 2], f[MAXN << 2], g[MAXN << 2]; char A[MAXN], B[MAXN];inline void inc(int &x, int y) { x += y; if (x >= mod) x -= mod; } inline void dec(int &x, int y) { x -= y; if (x < 0) x += mod; } inline int add(int x, int y) { x += y; return x >= mod ? x - mod : x; } inline int sub(int x, int y) { x -= y; return x < 0 ? x + mod : x; }int main() {freopen("base.in", "r", stdin);freopen("base.out", "w", stdout);scanf("%d%s%s", &K, A, B);n = strlen(A), m = strlen(B);if (m > n) { puts("0"); return 0; }for (int i = 0; i < 4; ++i) {memset(f, 0, sizeof f); memset(g, 0, sizeof g);for (int j = 0, last = -1; j < n; ++j) {if (A[j] == set[i]) last = j;if ((~last) && last >= j - K) g[j] = 1;}for (int j = n - 1, last = -1; j >= 0; --j) {if (A[j] == set[i]) last = j;if((~last) && last <= j + K) g[j] = 1;}for (int j = 0; j < m; ++j)if (B[j] == set[i]) f[j] = 1;std::reverse(g, g + n);int sz;for (sz = 0; (1 << sz) < (n << 1); ++sz);pre_rev(sz);NTT(f, sz, 1); NTT(g, sz, 1);for (int i = 0; i < (1 << sz); ++i) f[i] = (LL)f[i] * g[i] % mod;NTT(f, sz, -1);for (int i = 0; i <= n - m; ++i) inc(match[i], f[n - 1 - i]);//debug//for (int i = 0; i <= n - m; ++i) printf("%d ", f[n - 1 - i]);//puts("");}for (int i = 0; i <= n - m; ++i) if (match[i] == m) ++ans;printf("%d\n", ans);return 0; } int qpower(int x, int y, int p) {int res = 1;while (y) {if (y & 1) res = (LL)res * x % p;x = (LL)x * x % p; y >>= 1;}return res; } void NTT(int *arr, int sz, int tp) {for (int i = 0; i < (1 << sz); ++i)if (rev[i] > i) std::swap(arr[i], arr[rev[i]]);for (int len = 2, half = 1; len <= (1 << sz); len <<= 1, half <<= 1) {int wn = qpower(3, (mod - 1) / len, mod);if (tp == -1) wn = qpower(wn, mod - 2, mod);for (int i = 0; i < (1 << sz); i += len) {int w = 1;for (int j = 0; j < half; ++j, w = (LL)w * wn % mod) {int x = arr[i + j], y = (LL)arr[i + j + half] * w % mod;inc(arr[i + j], y); dec(arr[i + j + half] = x, y);}}}if (tp == -1) {int inv = qpower(1 << sz, mod - 2, mod);for (int i = 0; i < (1 << sz); ++i) arr[i] = (LL)arr[i] * inv % mod;} } inline void pre_rev(int sz) {for (int i = 0; i < (1 << sz); ++i) rev[i] = ((rev[i >> 1] >> 1) | ((i & 1) << sz - 1)); } //Rhein_E

轉(zhuǎn)載于:https://www.cnblogs.com/Rhein-E/p/10524007.html

總結(jié)

以上是生活随笔為你收集整理的day10T1改错记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av最新| 超碰一区二区三区 | 日日噜噜噜夜夜爽爽狠狠视频97 | 欧美h网站 | 国偷自产av一区二区三区 | 欧美精品成人一区二区在线观看 | 俄罗斯毛片基地 | 精品久久香蕉国产线看观看亚洲 | 国产乱子伦农村叉叉叉 | 2025国产精品 | 国产乱码在线观看 | 草草影院第一页 | 精品久久久久久无码中文野结衣 | 国产又粗又长又大视频 | 日韩欧美h| 在线免费激情视频 | 亚洲欧美精品一区 | 国产97av | 国产字幕在线观看 | 激情免费视频 | a天堂中文| 国产一区二区三区色淫影院 | 国产视频一区二区三区在线 | 色婷婷一区二区 | 99re在线视频观看 | 国产精品无码午夜福利 | 风间由美av在线 | 亚洲av无码一区二区三区dv | 日本护士╳╳╳hd少妇 | 三上悠亚一区二区 | 日韩精品h | 亚洲一区二区电影 | 69视频在线看 | 国产日日夜夜 | avtt男人天堂 | 在线免费视频 | 丁香婷婷激情五月 | 美国一区二区 | 精品视频一二 | 黄色美女免费网站 | 亚洲欧美日韩在线播放 | 超碰丝袜 | 欧美操老女人 | 亚洲欧美自拍偷拍 | a级片一区二区 | 国产福利在线导航 | 亚洲人在线观看视频 | 国产吞精囗交免费视频网站 | 最新黄色av网站 | av免费高清 | 香蕉大人久久国产成人av | 仙踪林久久久久久久999 | 91极品蜜桃臀 | 中文字幕一区二区在线观看视频 | 人操人操 | 亚洲国产日韩a在线播放性色 | 韩国91视频 | 佐佐木明希av在线 | 66亚洲一卡2卡新区成片发布 | 精品1区2区3区 | 国产精品66 | 精品午夜一区二区三区在线观看 | 久久精品在线免费观看 | 黄色片久久久久 | 国模精品一区 | 欧美综合第一页 | 免费av在线 | 免费a网 | www中文在线 | 亚洲人成免费电影 | 欧美xxxx精品| 欧美呦交| 精品视频在线免费观看 | 国产一区在线看 | 色吊妞| 中文在线观看视频 | 丁香激情五月少妇 | 狠狠干2024| 强睡邻居人妻中文字幕 | 尤物193.com | 911国产| 三级成人在线 | 在线观看国产免费视频 | 日韩精品黄| 亚洲精品色午夜无码专区日韩 | 国产三区在线观看 | 国产精品久久久久久久久久久久久久久久久久 | 精品人妻一区二区三区在线视频 | 无码无套少妇毛多18pxxxx | 97桃色| 国产精品成人免费一区二区视频 | 天天插天天射天天干 | www精品一区二区三区 | 少妇性色av| 精品国产一二区 | 99riav视频 | 欧美日韩高清不卡 | 欧美极品三级 | 咪咪av|