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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

#1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)

發布時間:2024/4/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

思路

求不可重疊最長重復子串,也可以利用height[i]height[i]height[i]

  • 二分枚舉答案KKK
  • height[i]≥Kheight[i] \ge Kheight[i]K可能存在解,然后判斷min(sa[i],sa[i?1]),max(sa[i],sa[i?1])min(sa[i], sa[i-1]),max(sa[i], sa[i-1])min(sa[i],sa[i?1])max(sa[i],sa[i?1])的關系,看能否構造成不重疊的公共前綴
  • height[i]height[i]height[i]數值相同的分成一組,取小組中的最值計算
#include <bits/stdc++.h> #define LL long long #define P pair<int, int> #define lowbit(x) (x & -x) #define mem(a, b) memset(a, b, sizeof(a)) #define mid ((l + r) >> 1) #define lc rt<<1 #define rc rt<<1|1 #define endl '\n' const int maxn = 1e5 + 5; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; using namespace std; int cntA[maxn], cntB[maxn], A[maxn], B[maxn]; int Sa[maxn], tsa[maxn], height[maxn], Rank[maxn]; int s[maxn]; int n; void suffixArray () {for (int i = 0; i < 1000; ++i) cntA[i] = 0;for (int i = 1; i <= n; ++i) cntA[s[i]]++;for (int i = 1; i < 1000; ++i) cntA[i] += cntA[i-1];for (int i = n; i >= 1; --i) Sa[ cntA[s[i]]-- ] = i;Rank[ Sa[1] ] = 1;for (int i = 2; i <= n; ++i) {Rank[Sa[i]] = Rank[Sa[i-1]];if (s[Sa[i]] != s[Sa[i-1]]) Rank[Sa[i]]++;}for (int l = 1; Rank[Sa[n]] < n; l <<= 1) {for (int i = 0; i <= n; ++i) cntA[i] = 0;for (int i = 0; i <= n; ++i) cntB[i] = 0;for (int i = 1; i <= n; ++i) {cntA[ A[i] = Rank[i] ]++;cntB[ B[i] = (i + l <= n) ? Rank[i+l] : 0]++;}for (int i = 1; i <= n; ++i) cntB[i] += cntB[i-1];for (int i = n; i >= 1; --i) tsa[ cntB[B[i]]-- ] = i;for (int i = 1; i <= n; ++i) cntA[i] += cntA[i-1];for (int i = n; i >= 1; --i) Sa[ cntA[A[tsa[i]]]-- ] = tsa[i];Rank[ Sa[1] ] = 1;for (int i = 2; i <= n; ++i) {Rank[Sa[i]] = Rank[Sa[i-1]];if (A[Sa[i]] != A[Sa[i-1]] || B[Sa[i]] != B[Sa[i-1]]) Rank[Sa[i]]++;}}for (int i = 1, j = 0; i <= n; ++i) {if (j) --j;int tmp = Sa[Rank[i] - 1];while (i + j <= n && tmp + j <= n && s[i+j] == s[tmp+j]) ++j;height[Rank[i]] = j;} } int check(int x) {int minsa = 1e9, maxsa = -1e9;for (int i = 1; i <= n; ++i) {if (height[i] >= x) {minsa = min(minsa, Sa[i]);maxsa = max(maxsa, Sa[i]);if (maxsa - minsa >= x) return 1;}else {minsa = Sa[i];maxsa = Sa[i];}}return 0; }int main () {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; ++i) {cin >> s[i];}suffixArray();int l = 1, r = n;while (l <= r) {if (check(mid)) l = mid + 1;else r = mid - 1;} cout << r << endl;return 0; }

總結

以上是生活随笔為你收集整理的#1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久亚洲在线 | 国产亚洲精品精品国产亚洲综合 | 国产高潮国产高潮久久久 | 狠狠操夜夜操 | 青青草国产在线视频 | 国产高潮又爽又无遮挡又免费 | 国产片网站 | 黄色片网站国产 | 日韩不卡一二区 | 91在线播放国产 | 久操视频网 | 久久久久久91 | 国产3p露脸普通话对白 | 国产九色在线播放九色 | 噜噜噜在线 | 国产1区二区 | 在线免费观看成年人视频 | 成都电影免费大全 | 性欧美丰满熟妇xxxx性 | 丁香花电影高清在线阅读免费 | 欧美性www| 日韩欧美视频一区二区三区 | 性欧美4khd高清极品 | 婷婷六月色 | 成人3d动漫在线观看 | 亚洲AV无码一区二区三区少妇 | 国产精品久久久久久在线观看 | 国产精品主播一区二区 | 亚洲专区在线播放 | 国产欧美一区二区三区精华液好吗 | 国产成人午夜高潮毛片 | 黄黄视频在线观看 | 亚洲成人久久久 | 亚洲免费av网址 | 正在播放亚洲 | 久久精品免费播放 | 激情文学综合网 | 性xxx欧美 | 天天躁日日躁狠狠躁 | 久久av影视 | av网站在线观看免费 | 亚洲 美腿 欧美 偷拍 | 美女精品久久 | 日本电影一区二区三区 | 亚洲男人的天堂在线视频 | 成人精品一区二区三区在线 | 日本特黄特黄刺激大片 | 在线一区二区三区四区 | 国产激情久久久 | 风韵少妇性饥渴推油按摩视频 | 99r精品视频 | 色眯眯影视| 午夜羞羞影院 | 亚洲经典av| 久久噜噜色综合一区二区 | 男人天堂网在线 | 嫩草视频网站 | 亚洲国产一二 | 光棍影院一区二区 | 国产女主播喷水视频在线观看 | 日本午夜精品理论片a级app发布 | 国产中文字幕av | 久久精品久久国产 | 成人h动漫精品一区二区 | 九九久久综合 | 亚洲另类av| 久久久久久免费毛片精品 | 最新av中文字幕 | 一区二区三区国产av | 婷婷在线观看视频 | 少妇精品偷拍高潮白浆 | 精品影视 | 一个色的综合 | 视频二区 | 轻轻草在线视频 | 一边摸上面一边摸下面 | 最新激情网站 | 国产精品23p | 主人性调教le百合sm | 在线观看麻豆av | 美女扒开腿免费视频 | 不卡一区二区在线观看 | 午夜小影院 | 免费一二区 | 揄拍成人国产精品视频 | 成年人在线免费观看网站 | 色老头一区二区 | 久久久免费网站 | 成人免费国产 | 一级片在线观看视频 | 精品人妻少妇嫩草av无码专区 | 日本视频免费观看 | 东京热毛片 | 野花视频在线观看免费 | 天天躁日日躁狠狠躁 | 国产精品99久久免费黑人人妻 | 夜夜爽av福利精品导航 | 欧美我不卡 | 婷婷午夜精品久久久久久性色av |