DZY Loves Strings
字符串?哈希!
考虑暴力,对每次询问
对
不难发现若
对
对所有出现次数
询问
若
#include <vector>
#include <cstdio>
#include <cstring>
#define B 27ll
using namespace std;
vector<int> v[150050];
char s[50050];
int n, m, c1, c2, p1[600050], L[150050], p[5][50050], p2[150050], f[350][150050];
int H(int l, int r)
{
int q = 0;
for (int i = l; i <= r; ++i)
q = q * B + s[i] - 'a' + 1;
return q;
}
int main()
{
memset(f, 0x3f, sizeof f);
scanf("%s", s + 1);
n = strlen(s + 1);
for (int z = 1; z <= 4; ++z)
for (int l = 1, k; l + z - 1 <= n; ++l)
{
if (!p1[k = H(l, l + z - 1)])
L[p1[k] = ++c1] = z;
v[p[z][l] = p1[k]].push_back(l);
}
for (int i = 1; i <= c1; ++i)
if (v[i].size() >= 450)
{
p2[i] = ++c2;
for (int j = 1, x1, x2, y1, y2; j < v[i].size(); ++j)
{
x1 = v[i][j - 1];
x2 = x1 + L[i] - 1;
y1 = v[i][j];
y2 = y1 + L[i] - 1;
for (int z = 1; z <= 4; ++z)
for (int l = x1, r; l < y1 && l + z - 1 <= n; ++l)
r = l + z - 1, f[c2][p[z][l]] = min(f[c2][p[z][l]], min(max(r, x2) - x1 + 1, max(r, y2) - l + 1));
}
int x1 = v[i][0], x2 = x1 + L[i] - 1;
for (int z = 1; z <= 4; ++z)
for (int l = 1; l < x1; ++l)
f[c2][p[z][l]] = min(f[c2][p[z][l]], max(x2, l + z - 1) - l + 1);
x1 = v[i][v[i].size() - 1], x2 = x1 + L[i] - 1;
for (int z = 1; z <= 4; ++z)
for (int l = x1; l + z - 1 <= n; ++l)
f[c2][p[z][l]] = min(f[c2][p[z][l]], max(x2, l + z - 1) - x1 + 1);
}
scanf("%d", &m);
while (m--)
{
scanf("%s", s + 1);
int a = p1[H(1, strlen(s + 1))];
scanf("%s", s + 1);
int b = p1[H(1, strlen(s + 1))];
if (!a || !b)
puts("-1");
else if (p2[a])
printf("%d\n", f[p2[a]][b]);
else if (p2[b])
printf("%d\n", f[p2[b]][a]);
else
{
int u = 0, q = 1e9;
for (int i = 0, l1, r1, l2, r2; i < v[a].size(); ++i)
{
l1 = v[a][i];
r1 = l1 + L[a] - 1;
while (u + 1 < v[b].size() && v[b][u] < l1)
++u;
l2 = v[b][u];
r2 = l2 + L[b] - 1;
if (l2 >= l1)
{
q = min(q, max(r1, r2) - l1 + 1);
if (u)
{
l2 = v[b][u - 1];
r2 = l2 + L[b] - 1;
q = min(q, max(r1, r2) - l2 + 1);
}
}
else
q = min(q, max(r1, r2) - l2 + 1);
}
printf("%d\n", q);
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具