제출 #47992

#제출 시각아이디문제언어결과실행 시간메모리
47992KmcodePalindromes (APIO14_palindrome)C++14
0 / 100
65 ms35196 KiB
#include "bits/stdc++.h"
using namespace std;

#define MAX 300015
char buf[MAX];
string s;

int len[MAX];
int linkk[MAX];
int nex[MAX][26];

int ord;
int cur;

int cnt[MAX];

void append(int idx) {
	char c = s[idx];
	while (!(idx-len[cur]-1>=0&&s[idx]==s[idx-len[cur]-1])) {
		cur = linkk[cur];
	}
	if (nex[cur][c - 'a'] == -1) {
		nex[cur][c - 'a'] = ord;
		ord++;
		len[nex[cur][c - 'a']] = len[cur] + 2;
		linkk[nex[cur][c - 'a']] = linkk[cur];
		cur = nex[cur][c - 'a'];
		if (len[cur] == 1) {
			linkk[cur] = 1;
		}
		else {
			while (nex[linkk[cur]][c - 'a'] == -1) {
				linkk[cur] = linkk[linkk[cur]];
				if (linkk[cur] == -1)exit(1);
			}
			linkk[cur] = nex[linkk[cur]][c - 'a'];
		}
	}
	else {
		cur = nex[cur][c - 'a'];
	}
	cnt[cur]++;
}

int main() {
	memset(nex, -1,sizeof(nex) );
	len[0] = -1;
	len[1] = 0;
	ord = 2;
	scanf("%s", buf);
	s = buf;
	linkk[1] = 0;
	linkk[0] = -1;
	for (int i = 0; i < s.size(); i++) {
		append(i);
	}
	long long int ans = 0;
	for (int i = ord - 1; i >= 2; i--) {
		cnt[linkk[i]] += cnt[i];
		ans = max(ans, (long long int)(len[i])*cnt[i]);
	}
	printf("%lld\n", ans);
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

palindrome.cpp: In function 'int main()':
palindrome.cpp:54:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < s.size(); i++) {
                  ~~^~~~~~~~~~
palindrome.cpp:50:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s", buf);
  ~~~~~^~~~~~~~~~~
#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...