P3893 [GDOI2014] Beyond 题解
P3893 [GDOI2014] Beyond 题解
思路
称第一个字符串为
考虑枚举环长
固定
但是当
为了优化做法,用式子表示出来:
发现底下的式子是二维偏序,所以可以用树状数组解决这个问题。
具体而言,从大到小枚举
这样就是前缀
上述
时间复杂度:
// Problem: P3893 [GDOI2014] Beyond
// Contest: Luogu
// Author: Moyou
// Copyright (c) 2023 Moyou All rights reserved.
// Date: 2023-12-21 23:25:40
#include <cstring>
#include <iostream>
using namespace std;
const int N = 2e6 + 10, M = 2e6 + 10;
int n;
int z1[N], z2[N], exz1[N], exz2[N];
string a, b;
void Z(string s, int z[]) {
z[1] = s.size();
for(int i = 2, l = 0, r = 0; i < s.size(); i ++) {
if(i <= r) z[i] = min(z[i - l + 1], r - i + 1);
while(i + z[i] < s.size() && s[i + z[i]] == s[z[i] + 1]) z[i] ++;
if(i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
}
}
void exkmp(string a, string b, int z[], int p[]) {
Z(a, z);
for(int i = 1, l = 0, r = 0; i < b.size(); i ++) {
if(i <= r) p[i] = min(z[i - l + 1], r - i + 1);
while(p[i] + 1 < a.size() && i + p[i] < b.size() && a[p[i] + 1] == b[i + p[i]]) p[i] ++;
if(i + p[i] - 1 > r) l = i, r = i + p[i] - 1;
}
}
struct BIT {
int tr[N];
void update(int i, int c) { for (; i <= n; i += i & -i) tr[i] = max(c, tr[i]); }
int query(int i) { int res = -1e9; for (; i; i &= i - 1) res = max(res, tr[i]); return res; }
void clear() {memset(tr, -0x3f, sizeof tr);}
} bit;
int h[N], ne[M], e[M], idx;
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> a >> b;
a = "$" + a, b = "$" + b;
exkmp(a, b, z1, exz1);
exkmp(b, a, z2, exz2);
int ans = 0;
memset(h, -1, sizeof h);
for(int i = 1; i <= n; i ++)
add(exz1[i + 1], i);
bit.clear();
for(int i = n; i; i --) {
for(int j = h[i]; ~j; j = ne[j])
bit.update(e[j], e[j]);
ans = max(ans, i + bit.query(exz2[i + 1]));
}
cout << ans << '\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现