QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#770272#7780. Dark LaTeX vs. Light LaTeXRubyonlyWA 15ms203120kbC++232.1kb2024-11-21 21:19:572024-11-21 21:19:57

Judging History

This is the latest submission verdict.

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-21 21:19:57]
  • Judged
  • Verdict: WA
  • Time: 15ms
  • Memory: 203120kb
  • [2024-11-21 21:19:57]
  • Submitted

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(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: 0ms
memory: 202992kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 3ms
memory: 202956kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 12ms
memory: 203028kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 15ms
memory: 203020kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: -100
Wrong Answer
time: 3ms
memory: 203120kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1182

result:

wrong answer 1st numbers differ - expected: '1161', found: '1182'