Submission #376625

#TimeUsernameProblemLanguageResultExecution timeMemory
376625rainboyPalindromes (APIO14_palindrome)C11
100 / 100
54 ms65152 KiB
#include <stdio.h>
#include <string.h>

#define N	300000
#define A	26

long long max(long long a, long long b) { return a > b ? a : b; }

int tt[2 + N][A], ff[2 + N], fff[2 + N][A], len[2 + N], cnt[2 + N], _;

int node(int l) {
	len[_] = l;
	return _++;
}

void init() {
	int a;

	node(0), node(-1);
	ff[0] = 1;
	for (a = 0; a < A; a++)
		fff[0][a] = fff[1][a] = 1;
}

int main() {
	static char cc[N + 1];
	int n, i, t;
	long long ans;

	init();
	scanf("%s", cc), n = strlen(cc);
	for (i = 0, t = 0; i < n; i++) {
		int a = cc[i] - 'a';

		if (i == len[t] || cc[i - 1 - len[t]] != cc[i])
			t = fff[t][a];
		if (!tt[t][a]) {
			int t_ = node(len[t] + 2), f = tt[fff[t][a]][a];

			tt[t][a] = t_, ff[t_] = f;
			memcpy(fff[t_], fff[f], A * sizeof *fff[f]), fff[t_][cc[i - len[f]] - 'a'] = f;
		}
		t = tt[t][a];
		cnt[t]++;
	}
	for (t = _ - 1; t > 1; t--)
		cnt[ff[t]] += cnt[t];
	ans = 0;
	for (t = 2; t < _; t++)
		ans = max(ans, (long long) cnt[t] * len[t]);
	printf("%lld\n", ans);
	return 0;
}

Compilation message (stderr)

palindrome.c: In function 'main':
palindrome.c:31:2: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
   31 |  scanf("%s", cc), n = strlen(cc);
      |  ^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...