Submission #48155

#TimeUsernameProblemLanguageResultExecution timeMemory
48155kyaryunhaPalindromes (APIO14_palindrome)C++17
0 / 100
1085 ms3564 KiB
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> int A[300005]; string s,imsi; int ssiz,dap,isiz; map<string,pii> mp; void manachers(string S,int N) { int r = 0, p = 0; for(int i=0;i<N;i++) { if(i<=r) A[i]=min(A[2*p-1],r-i); else A[i]=0; while(i-A[i]-1>=0&&i+A[i]+1<N&&S[i-A[i]-1]==S[i+A[i]+1]) A[i]++; if(i+A[i]>r) { r=i+A[i]; p=i; } } } int main(void) { cin >> imsi; isiz = imsi.size(); s+='#'; for(int i=0;i<isiz;i++) { s+=imsi[i]; s+='#'; } ssiz = s.size(); manachers(s,ssiz); for(int i=1;i<ssiz;i+=2) { string now; for(int j=i-A[i]+1;j<=i+A[i]-1;j+=2) now+=s[j]; int nsiz = now.size(); for(int j=nsiz;j>=0;j-=2) { //printf("%s\n",now.c_str()); mp[now].second=now.size(); mp[now].first++; string newnow; for(int i=1;i<nsiz-1;i++) { newnow=now[i]; } now=newnow; } } map<string,pii>::iterator iter; for(iter=mp.begin();iter!=mp.end();iter++) { int score = (*iter).second.first*(*iter).second.second; dap = max(dap,score); } printf("%d",dap); }
#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...