QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#734768 | #7780. Dark LaTeX vs. Light LaTeX | acb437 | ML | 0ms | 0kb | C++14 | 1.2kb | 2024-11-11 14:59:53 | 2024-11-11 14:59:59 |
Judging History
answer
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 5e3 + 5;
char s[N], t[N];
int n, m, f[N][N];ll ans;
ll g[N][N], h[N][N], sum[N][N];
void solve(char s[], char t[], int n, int m)
{
memset(g, 0, sizeof(g));
memset(h, 0, sizeof(h));
memset(sum, 0, sizeof(sum));
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
g[i][j] = (s[i] == t[j]) * (1 + g[i - 1][j - 1]), sum[i][g[i][j]]++;
for(int j = n;j >= 1;j--)sum[i][j] += sum[i][j + 1];
for(int j = 1;j <= n;j++)sum[i][j] += sum[i][j - 1];
}
for(int i = n;i >= 1;i--)
for(int j = n;j > i + 1;j--)
h[i][j] = (s[i] == s[j]) * (1 + h[i + 1][j + 1]);
for(int i = 1;i <= n;i++)
for(int j = i + 2;j <= n;j++)
ans += sum[j - 1][j - i - 1] - sum[j - 1][max(j - i - h[i][j], 1ll) - 1];
}
int main()
{
scanf("%s%s", s + 1, t + 1), n = strlen(s + 1), m = strlen(t + 1);
for(int i = n;i >= 1;i--)
for(int j = m;j >= 1;j--)
f[i][j] = (s[i] == t[j]) * (1 + f[i + 1][j + 1]), ans += f[i][j];
solve(s, t, n, m), solve(t, s, m, n);
return printf("%lld\n", ans) & 0;
}
详细
Test #1:
score: 0
Memory Limit Exceeded
input:
abab ab
output:
8