QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#770277 | #7780. Dark LaTeX vs. Light LaTeX | Rubyonly | TL | 577ms | 315372kb | C++23 | 2.1kb | 2024-11-21 21:21:04 | 2024-11-21 21:21:05 |
Judging History
answer
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5e3 + 50, INF = 0x7f7f7f7f;
const ull base = 233;
inline int read() {
int x = 0, w = 1;
char ch = getchar();
for (; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') w = -1;
for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
return x * w;
}
int n, m;
char a[maxn], b[maxn];
int lcp[maxn][maxn];
ll ans, sum[maxn][maxn];
unordered_map<ull, int> num;
int main() {
scanf("%s%s", a + 1, b + 1), n = strlen(a + 1), m = strlen(b + 1);
for (int i = n; i >= 1; i --)
for (int j = n; j >= 1; j --)
if (a[i] == a[j]) lcp[i][j] = lcp[i + 1][j + 1] + 1;
else lcp[i][j] = 0;
for (int i = 1; i <= m; i ++) {
ull res = 0;
for (int j = i; j <= m; j ++)
res = res * base + b[j] - 'a' + 1, num[res] ++;
}
for (int i = 1; i <= n; i ++) {
ull res = 0;
for (int j = i; j <= n; j ++)
res = res * base + a[j] - 'a' + 1, sum[i][j] = num[res], ans += sum[i][j];
}
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= i; j ++)
sum[j][i] += sum[j - 1][i];
for (int i = 1; i <= n; i ++)
for (int j = i + 1; j <= n; j ++)
ans += sum[i + min(lcp[i][j], j - i - 1)][j - 1] - sum[i][j - 1];
num.clear();
memset(lcp, 0, sizeof lcp);
memset(sum, 0, sizeof sum);
for (int i = m; i >= 1; i --)
for (int j = m; j >= 1; j --)
if (b[i] == b[j]) lcp[i][j] = lcp[i + 1][j + 1] + 1;
else lcp[i][j] = 0;
for (int i = 1; i <= n; i ++) {
ull res = 0;
for (int j = i; j <= n; j ++)
res = res * base + a[j] - 'a' + 1, num[res] ++;
}
for (int i = 1; i <= m; i ++) {
ull res = 0;
for (int j = i; j <= m; j ++)
res = res * base + b[j] - 'a' + 1, sum[i][j] = num[res];
}
for (int i = 1; i <= m; i ++)
for (int j = 1; j <= i; j ++)
sum[j][i] += sum[j - 1][i];
for (int i = 1; i <= m; i ++)
for (int j = i + 1; j <= m; j ++)
ans += sum[i + min(lcp[i][j], j - i - 1)][j - 1] - sum[i][j - 1];
return printf("%lld\n", ans), 0;
}
详细
Test #1:
score: 100
Accepted
time: 23ms
memory: 302660kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 11ms
memory: 302660kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 8ms
memory: 302664kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 7ms
memory: 302668kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 4ms
memory: 302648kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 577ms
memory: 303160kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: 0
Accepted
time: 118ms
memory: 315212kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60716448
result:
ok 1 number(s): "60716448"
Test #8:
score: 0
Accepted
time: 126ms
memory: 315372kb
input:
mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...
output:
60679828
result:
ok 1 number(s): "60679828"
Test #9:
score: -100
Time Limit Exceeded
input:
vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...