Submission #47990

#TimeUsernameProblemLanguageResultExecution timeMemory
47990KmcodePalindromes (APIO14_palindrome)C++14
0 / 100
50 ms35508 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]];}linkk[cur] = nex[linkk[cur]][c - 'a'];if (linkk[cur] <= 1)exit(1);}}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; }

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:32:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < s.size(); i++) {
                  ~~^~~~~~~~~~
palindrome.cpp:28: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...