QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#770277#7780. Dark LaTeX vs. Light LaTeXRubyonlyTL 577ms315372kbC++232.1kb2024-11-21 21:21:042024-11-21 21:21:05

Judging History

你现在查看的是最新测评结果

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-21 21:21:05]
  • 评测
  • 测评结果:TL
  • 用时:577ms
  • 内存:315372kb
  • [2024-11-21 21:21:04]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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...

output:


result: