亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HDU 2459 PKU 3693 Maximum repetition substring 后綴數組 RMQ

2019-11-14 10:52:59
字體:
來源:轉載
供稿:網友

題目地址:

HDU 2459 PKU 3696

題意:

給一個長度不超過1e5的字符串,找出其中一個子串,要求該子串能夠被分割成盡可能多的相同的字符串,若有多個符合要求的子串,輸出字典序最小的那個。

思路:

圖片不看也沒關系,但這個是羅穗騫大佬在他的論文《后綴數組——處理字符串的有力工具》里的原話,然后這是他的spoj687的代碼:http://paste.Ubuntu.com/23923746/,本人就是參考他的代碼,明白了思路的 論文第19頁

RMQ部分只是用來求lcp的,不說了 枚舉子串重復部分的長度L,然后以L為步長,枚舉題目所給的字符串下標,設lcp是suffix[L]和suffix[2 * L]的公共前綴,只要lcp>=L,重復的字符串就出現了(首先兩者相同的部分超過了suffix[L]和suffix[2 * L]的距離,然后suffix[2 * L]作為suffix[L] 的子串,重復lcp部分,就構成了一個有重復的字符串,可能這里有點繞……不懂的讀者可以自己舉例理解下)。 重復部分的重復次數自然就是lcp/L+1(兩字符串公共部分的長度 / 重復部分的長度 + suffix[L]到suffix[2 * L]之間的子串個數) 然后考慮一個特殊情況,比如說如下字符: 0123123123 就是按上述方法計算的話,算出來的字符是312312,原因是因為枚舉時出了問題(畢竟不是一個個枚舉的,而是有步長的枚舉),考慮suffix[3]與suffix[L]的lcp長度為4,比枚舉的長度3多了一個1,可以往前再走L?lcp步(1+2==3),看看這個后綴與其后面L的后綴的lcp長度是否大于等于L?lcp,如果比前面走的步數要大的話,說明少計算了一次重復部分。 輸出答案的部分參考了cxlove的,本來自己是特判加枚舉子串時直接判定答案的,可以不知道哪里寫丑了,總是有問題,后面就換成了cxlove的思路QAQ,他的題解:http://blog.csdn.net/acm_cxlove/article/details/7941205

可能說的不好,還請讀者多多思考

代碼:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1e5 + 5;char str[MAXN];int sa[MAXN], Rank[MAXN], height[MAXN], wv[MAXN], c[MAXN];int d[MAXN][20];int cnt, stk[MAXN];bool cmp(int *r, int a, int b, int l) { return r[a] == r[b] && r[a + l] == r[b + l];}void da(char *r, int n, int m) { int i, j, p, *x = Rank, *y = height; for (i = 0; i < m; ++i) c[i] = 0; for (i = 0; i < n; ++i) ++c[x[i] = r[i]]; for (i = 1; i < m; ++i) c[i] += c[i - 1]; for (i = n - 1; i >= 0; --i) sa[--c[x[i]]] = i; for (j = 1, p = 1; p < n; j *= 2, m = p) { for (p = 0, i = n - j; i < n; ++i) y[p++] = i; for (i = 0; i < n; ++i) if (sa[i] >= j) y[p++] = sa[i] - j; for (i = 0; i < n; ++i) wv[i] = x[y[i]]; for (i = 0; i < m; ++i) c[i] = 0; for (i = 0; i < n; ++i) ++c[wv[i]]; for (i = 1; i < m; ++i) c[i] += c[i - 1]; for (i = n - 1; i >= 0; --i) sa[--c[wv[i]]] = y[i]; for (swap(x, y), p = 1, x[sa[0]] = 0, i = 1; i < n; ++i) x[sa[i]] = cmp(y, sa[i - 1], sa[i], j) ? p - 1 : p++; }}void calheight(char *r, int n) { int i, j, k = 0; for (i = 1; i <= n; ++i) Rank[sa[i]] = i; for (i = 0; i < n; height[Rank[i++]] = k) for (k ? k-- : 0, j = sa[Rank[i] - 1]; r[i + k] == r[j + k]; ++k);}void RMQ_init(int *a, int n) { for (int i = 0; i < n; ++i) d[i][0] = a[i]; for (int j = 1; (1 << j) <= n; ++j) for (int i = 0; i + (1 << j) - 1 < n; ++i) d[i][j] = min(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]);}int RMQ(int L, int R) { L = Rank[L], R = Rank[R]; if (L > R) swap(L, R); ++L; int k = 0; while ((1 << (k + 1)) <= R - L + 1) ++k; return min(d[L][k], d[R - (1 << k) + 1][k]);}int main() { //freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); int kase = 0; while (~scanf("%s", str)) { if (str[0] == '#') break; int len = strlen(str), maxr = 0, k, jj, now; da(str, len + 1, 'z' + 1); calheight(str, len); RMQ_init(height, len + 1); for (int i = 1; i < len; ++i) { for (int j = 0; j + i < len; j += i) { k = RMQ(j, j + i); now = k / i + 1; jj = j - (i - k % i); if (jj >= 0 && RMQ(jj, jj + i) >= (i - k % i)) ++now; if (now > maxr) { cnt = 0; maxr = now; stk[cnt++] = i; } else if (now == maxr) { stk[cnt++] = i; } } } for (int i = 1; i <= len; ++i) { for (int j = 0; j < cnt; ++j) { if (RMQ(sa[i], sa[i] + stk[j]) >= (maxr - 1) * stk[j]){ jj = sa[i]; k = stk[j]; goto END; } } } END:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电视剧在线观看免费网站| 亚洲一区二区久久久久久| 中文字幕日韩av| www.欧美免费| 日韩在线观看高清| 91av视频在线免费观看| 日本精品免费观看| 精品久久久久久久久久久| 日韩风俗一区 二区| 中文字幕国产亚洲2019| 国产精品99久久久久久久久| 亚洲国产婷婷香蕉久久久久久| 亚洲欧洲免费视频| 日韩的一区二区| 热re99久久精品国产66热| 精品香蕉在线观看视频一| 亚洲第一黄色网| 亚洲最大福利视频| 亚洲自拍在线观看| 91精品国产自产在线老师啪| 日本国产一区二区三区| 精品毛片网大全| www.欧美三级电影.com| 欧美日韩国产成人在线| 亚洲视频欧洲视频| 欧美夫妻性生活视频| 亚洲欧美日韩高清| 国产一区二区在线免费| 亚洲www视频| 国产精品尤物福利片在线观看| 国产精品成久久久久三级| 国产欧美日韩视频| 国产69精品久久久久久| 国产精品欧美风情| 亚洲另类激情图| 国产欧美最新羞羞视频在线观看| 性欧美xxxx视频在线观看| 日韩精品有码在线观看| 欧美性生交大片免费| 国产专区精品视频| 色综合天天狠天天透天天伊人| 色婷婷综合成人av| 日韩不卡中文字幕| 欧美一级大片在线观看| 精品视频久久久| 国产精品劲爆视频| 欧美大秀在线观看| 一区二区国产精品视频| 九九热99久久久国产盗摄| 亚洲天堂色网站| 少妇高潮 亚洲精品| 亚洲欧美精品在线| 黑人巨大精品欧美一区免费视频| 91精品国产乱码久久久久久久久| 国产精品丝袜久久久久久不卡| 国产精品xxx视频| 欧美噜噜久久久xxx| 97av在线视频| 精品亚洲一区二区三区| 国产91精品久久久久久| 亚洲理论电影网| 日韩精品福利网站| 亚洲视频免费一区| 日韩av中文字幕在线播放| 国产精品第一视频| 色先锋资源久久综合5566| 国产精品久久久久一区二区| 欧美成年人视频网站欧美| 亚洲欧美三级在线| 欧美电影免费在线观看| 国产脚交av在线一区二区| 国产99久久精品一区二区| 国产成人久久久| 日韩在线观看免费全| 中文字幕久精品免费视频| 欧美日韩人人澡狠狠躁视频| 日韩欧美在线一区| 国产成人精品视频在线| 亚洲男人天堂2024| 一区二区三区无码高清视频| 亚洲精品国精品久久99热| 国内精品久久久久久中文字幕| 黄网动漫久久久| 日韩激情在线视频| 色99之美女主播在线视频| 久久亚洲国产成人| 欧美极品少妇全裸体| 亚洲欧美国产精品久久久久久久| 91精品久久久久久久久中文字幕| 国产脚交av在线一区二区| 青青草99啪国产免费| 日本欧美国产在线| 538国产精品一区二区免费视频| 91久久国产精品91久久性色| 亚洲精品成人久久| 色播久久人人爽人人爽人人片视av| 在线视频一区二区| 国产精品国产福利国产秒拍| 日韩成人在线播放| 欧美视频精品一区| 国语对白做受69| 亚洲第一网中文字幕| 国产日韩欧美夫妻视频在线观看| 色噜噜狠狠狠综合曰曰曰88av| 久久久久久12| 97视频在线免费观看| 尤物九九久久国产精品的分类| 欧美香蕉大胸在线视频观看| 亚洲天堂av在线免费| 国产精品第3页| 久久久久久这里只有精品| 亚洲精品久久久久久久久久久久久| 日av在线播放中文不卡| 青青a在线精品免费观看| 45www国产精品网站| 久久久久久欧美| 国产噜噜噜噜噜久久久久久久久| 北条麻妃久久精品| 宅男66日本亚洲欧美视频| 91国产美女在线观看| 中文在线不卡视频| 亚洲视频在线观看视频| 国产一区二区三区在线视频| 国产精品av在线| 国产精品高潮呻吟久久av无限| 欧美激情在线观看视频| 亚洲大胆人体视频| 91最新在线免费观看| 中文字幕亚洲综合久久| 亚洲高清av在线| 久久久97精品| 一区二区三区 在线观看视| 久久精品视频中文字幕| 亚洲字幕一区二区| 亚洲人成电影在线| 2019中文字幕在线| 国产亚洲美女久久| 成人激情综合网| 欧美日韩中文在线观看| 亚洲精品美女在线观看| 国产免费久久av| 欧美第一页在线| 欧美一区亚洲一区| 国产精品高精视频免费| 亚洲色图色老头| 成人a在线视频| 亚洲精品视频免费在线观看| 国产欧美在线播放| 国产精品video| 国产精品流白浆视频| 国产精品视频99| 日韩在线观看电影| 91系列在线观看| 国产日韩欧美在线观看| 日韩va亚洲va欧洲va国产| 日韩在线视频免费观看高清中文| 久久久久久久久久久免费精品| 96精品久久久久中文字幕| 欧美激情一区二区三区在线视频观看| 久久久av网站| 亚洲激情自拍图| 国产精品电影一区| 亚洲国产精品成人一区二区| 欧美性69xxxx肥|