답안 #243582

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
243582 2020-07-01T10:54:12 Z islingr 회문 (APIO14_palindrome) C++14
100 / 100
75 ms 73540 KB
#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
using ld = long double;
 
#define rep(i, a, b) for (auto i = (a); i < (b); ++i)
#define trav(e, x) for (auto &e : x)
#define eb(x...) emplace_back(x)
#define all(x) begin(x), end(x)
#define sz(x) int((x).size())
 
template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
 
const int A = 26;
 
using pnode = struct node*;
struct node {
	int len, occ; pnode link, nxt[A];
	node() : occ{0}, link{nullptr} { fill(nxt, nxt + A, nullptr); }
};
 
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	string s; cin >> s;
	
	vector<pnode> nodes;
	pnode zero, imag, last;
	
	imag = new node();
	imag->len = -1;
	imag->link = imag;
 
	zero = new node();
	zero->len = 0;
	zero->link = imag;
 
	last = zero;

	rep(i, 0, sz(s)) {
		pnode cur = last;
		while (s[i - cur->len - 1] != s[i]) cur = cur->link;
		auto &tmp = cur->nxt[s[i] - 'a'];
		if (!tmp) {
			tmp = new node();
			tmp->len = cur->len + 2;
			if (cur != imag) {
				cur = cur->link;
				while (s[i - cur->len - 1] != s[i]) cur = cur->link;
				tmp->link = cur->nxt[s[i] - 'a'];
			} else tmp->link = zero;
			nodes.eb(tmp);
		}
		last = tmp;
		++last->occ;
	}

	reverse(all(nodes));
	trav(v, nodes) v->link->occ += v->occ;

	ll ans = 0;
	trav(v, nodes) ckmax(ans, 1ll * v->len * v->occ);
	cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 5 ms 384 KB Output is correct
7 Correct 5 ms 384 KB Output is correct
8 Correct 4 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 4 ms 384 KB Output is correct
12 Correct 4 ms 384 KB Output is correct
13 Correct 4 ms 384 KB Output is correct
14 Correct 5 ms 384 KB Output is correct
15 Correct 4 ms 384 KB Output is correct
16 Correct 4 ms 384 KB Output is correct
17 Correct 4 ms 384 KB Output is correct
18 Correct 5 ms 384 KB Output is correct
19 Correct 5 ms 512 KB Output is correct
20 Correct 4 ms 288 KB Output is correct
21 Correct 4 ms 384 KB Output is correct
22 Correct 4 ms 384 KB Output is correct
23 Correct 4 ms 384 KB Output is correct
24 Correct 4 ms 384 KB Output is correct
25 Correct 4 ms 384 KB Output is correct
26 Correct 5 ms 384 KB Output is correct
27 Correct 4 ms 384 KB Output is correct
28 Correct 5 ms 384 KB Output is correct
29 Correct 4 ms 384 KB Output is correct
30 Correct 4 ms 384 KB Output is correct
31 Correct 4 ms 384 KB Output is correct
32 Correct 4 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 512 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
7 Correct 5 ms 512 KB Output is correct
8 Correct 5 ms 512 KB Output is correct
9 Correct 5 ms 512 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 5 ms 384 KB Output is correct
12 Correct 5 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2816 KB Output is correct
2 Correct 7 ms 2816 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2816 KB Output is correct
5 Correct 7 ms 2816 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 6 ms 2816 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 6 ms 2048 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 24692 KB Output is correct
2 Correct 28 ms 24684 KB Output is correct
3 Correct 24 ms 24820 KB Output is correct
4 Correct 24 ms 24692 KB Output is correct
5 Correct 25 ms 24692 KB Output is correct
6 Correct 20 ms 18164 KB Output is correct
7 Correct 20 ms 20980 KB Output is correct
8 Correct 6 ms 640 KB Output is correct
9 Correct 10 ms 6140 KB Output is correct
10 Correct 21 ms 20980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 73456 KB Output is correct
2 Correct 66 ms 73456 KB Output is correct
3 Correct 67 ms 73540 KB Output is correct
4 Correct 70 ms 73432 KB Output is correct
5 Correct 75 ms 73456 KB Output is correct
6 Correct 70 ms 66292 KB Output is correct
7 Correct 64 ms 61168 KB Output is correct
8 Correct 8 ms 1032 KB Output is correct
9 Correct 8 ms 1032 KB Output is correct
10 Correct 56 ms 60148 KB Output is correct
11 Correct 59 ms 73452 KB Output is correct
12 Correct 12 ms 7560 KB Output is correct