Submission #47996

#TimeUsernameProblemLanguageResultExecution timeMemory
47996KmcodePalindromes (APIO14_palindrome)C++14
100 / 100
39 ms35796 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 (!(idx-len[linkk[cur]]-1>=0&&s[idx]==s[idx-len[linkk[cur]]-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:8:258: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    }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]);
                                                                                                                                                                                                                                                                ~~^~~~~~~~~~
palindrome.cpp:8:193: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    }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]);
                                                                                                                                                                                            ~~~~~^~~~~~~~~~~
#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...