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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

bzoj2085 [Poi2010]Hamsters 矩阵快速幂+字符串hash

發(fā)布時(shí)間:2023/10/11 综合教程 76 老码农
生活随笔 收集整理的這篇文章主要介紹了 bzoj2085 [Poi2010]Hamsters 矩阵快速幂+字符串hash 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目傳送門

https://lydsy.com/JudgeOnline/problem.php?id=2085

題解

考慮暴力 DP 的做法。令 \(dp[i][j]\) 表示以 \(j\) 為開頭的子串,并且已經(jīng)總共出現(xiàn) \(i\) 次的最小長(zhǎng)度。

\[dp[i][j] = \min_{k=1}^n\{dp[i-1][k] + len_j - LC(j, k) \}
\]

其中 \(LC(j, k)\) 表示最長(zhǎng)的 \(j\) 的后綴等于 \(k\) 的前綴。


然后這個(gè)東西可以用矩陣來(lái)加速。

矩陣的定義就是先加再取 \(\min\)。


時(shí)間復(fù)雜度 \(O(n^3\log m)\)。

#include<bits/stdc++.h>

#define fec(i, x, y) (int i = head[x], y = g[i].to; i; i = g[i].ne, y = g[i].to)
#define dbg(...) fprintf(stderr, __VA_ARGS__)
#define File(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define fi first
#define se second
#define pb push_back template<typename A, typename B> inline char smax(A &a, const B &b) {return a < b ? a = b, 1 : 0;}
template<typename A, typename B> inline char smin(A &a, const B &b) {return b < a ? a = b, 1 : 0;} typedef long long ll; typedef unsigned long long ull; typedef std::pair<int, int> pii; template<typename I> inline void read(I &x) {
int f = 0, c;
while (!isdigit(c = getchar())) c == '-' ? f = 1 : 0;
x = c & 15;
while (isdigit(c = getchar())) x = (x << 1) + (x << 3) + (c & 15);
f ? x = -x : 0;
} const int N = 200 + 7;
const int M = 1e5 + 7;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int base = 1997; int n, m, mxl;
int len[N];
char s[N][M];
ull ha[N][M], bin[M]; struct Matrix {
ll a[N][N]; inline Matrix() { memset(a, 0x3f, sizeof(a)); }
inline Matrix(const int &x) {
memset(a, 0x3f, sizeof(a));
for (int i = 1; i <= n; ++i) a[i][i] = x;
} inline Matrix operator * (const Matrix &b) {
Matrix c;
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
smin(c.a[i][j], a[i][k] + b.a[k][j]);
return c;
}
} A, B; inline Matrix fpow(Matrix x, int y) {
Matrix ans(0);
for (; y; y >>= 1, x = x * x) if (y & 1) ans = ans * x;
return ans;
} inline ull get_hash(ull *h, int l, int r) { return h[r] - h[l - 1] * bin[r - l + 1]; } inline void work() {
bin[0] = 1;
for (int i = 1; i <= mxl; ++i) bin[i] = bin[i - 1] * base;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j) {
int cnt = 0;
for (int k = 1; k <= std::min(len[i], len[j]) - 1; ++k)
if (get_hash(ha[i], 1, k) == get_hash(ha[j], len[j] - k + 1, len[j])) smax(cnt, k);
A.a[j][i] = len[j] - cnt;
// dbg("i = %d, j = %d, l = %d\n", i, j, cnt);
}
for (int i = 1; i <= n; ++i) B.a[i][1] = len[i];//, dbg("len[%d] = %d\n", i, len[i]);
B = fpow(A, m - 1) * B;
// B = A * B;
ll ans = INF;
for (int i = 1; i <= n; ++i) smin(ans, B.a[i][1]);//, dbg("B.a[%d][1] = %lld\n", i, B.a[i][1]);
printf("%lld\n", ans);
} inline void init() {
read(n), read(m);
for (int i = 1; i <= n; ++i) {
scanf("%s", s[i] + 1);
len[i] = strlen(s[i] + 1), smax(mxl, len[i]);
for (int j = 1; j <= len[i]; ++j) ha[i][j] = ha[i][j - 1] * base + (s[i][j] - 'a' + 1);
}
} int main() {
#ifdef hzhkk
freopen("hkk.in", "r", stdin);
#endif
init();
work();
fclose(stdin), fclose(stdout);
return 0;
}

總結(jié)

以上是生活随笔為你收集整理的bzoj2085 [Poi2010]Hamsters 矩阵快速幂+字符串hash的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本69少妇| 日韩av片免费观看 | 黑人大群体交免费视频 | 国产农村妇女精品 | 91蜜桃臀久久一区二区 | av三级网 | 色网综合 | 波多野吉衣中文字幕 | 欧美手机在线视频 | 卡一卡二av | 亚洲视频在线观看免费 | 天天操天天操天天操天天 | 婷婷成人在线 | 亚洲精华液一区二区 | 日韩在线视频精品 | 毛片免费一区二区三区 | 80日本xxxxxxxxx96| 少妇高潮惨叫久久久久 | 亚洲视频1| 亚洲国产视频一区 | 天天操夜夜干 | 日本电影大尺度免费观看 | 国产成人精品国内自产拍免费看 | 探花国产在线 | 激情91 | av中文天堂 | 日韩国产精品一区二区三区 | 男女免费网站 | 美女脱了裤子让男人捅 | 久久久国产精品x99av | 精品麻豆 | 国产在线视频网 | 欧美三级一级片 | 久久久久久久久久久免费 | 麻豆做爰免费观看 | 高清乱码毛片 | 亚洲免费观看av | 久久久夜色精品 | 黄色动漫在线免费观看 | 紧身裙女教师三上悠亚红杏 | 中文字幕首页 | 插我舔内射18免费视频 | 美女又爽又黄又免费 | 夜夜操天天 | 污片在线观看 | 丁香婷婷六月 | 日韩网站免费观看 | 精品一区免费观看 | 大陆av在线播放 | 爱爱视频欧美 | 亚洲精品一卡二卡 | 中文字幕88 | www日韩视频 | 国产日产欧美一区二区三区 | 天堂在线日本 | 免费九九视频 | 吃奶摸下的激烈视频 | 国产成人免费观看 | 一区二区在线国产 | 国产超碰人人模人人爽人人添 | 日韩精品一区二区三区中文字幕 | 国产高清免费在线观看 | 色91av| 蜜桃无码一区二区三区 | 日本黄色美女 | 老司机午夜免费精品视频 | 欧美精品乱码久久久久久按摩 | 国产乱人视频 | 欧美性日韩 | 国产av成人一区二区三区 | 免费在线看黄色 | 日本不卡一区二区三区视频 | 精品免费囯产一区二区三区 | 婷婷色伊人 | 精品国产乱码久久久 | 毛片网 | 精产国品一二三区 | 亚洲高清福利 | 国产农村妇女精品一区 | 免费网站看av | 久久久久亚洲av片无码下载蜜桃 | a毛片在线免费观看 | 国产一区二区三区精品在线观看 | 狠狠躁夜夜躁av无码中文幕 | 免费国产| 日韩免费在线视频 | 成人欧美在线观看 | 天天干天天谢 | 一级性生活免费视频 | 日韩av色图 | 极品在线播放 | 在线观看av资源 | 日韩美女激情视频 | 国产男人搡女人免费视频 | 亚洲一区毛片 | 中文在线免费观看 | 少妇影院在线观看 | 97性视频 | 高中男男gay互囗交观看 |