Submission #289941

#TimeUsernameProblemLanguageResultExecution timeMemory
289941secretweaponPalindromes (APIO14_palindrome)C++14
0 / 100
255 ms131076 KiB
#include <cstdio>
#include <cstring>
#include <map>
#include <string>
#include <iostream>

#define N 600005 

using namespace std;

int P[N] = {0};
map <string,int> mp;
string tmp= "", str, nw_str;

int main() {
   
   	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);

	while(cin>>str) {
	
		memset(P,0,sizeof(P));
		mp.clear();
		// pre processing 
		tmp = "$";
		for(int i=0; i<str.size(); i++) {
			tmp += "#";
			tmp += str[i];
		}
		tmp += "#";
		tmp += "@";
		
		int c = 1;
		int r = 2;
		int n = tmp.size();
		int mx = 1;
		int val;
		int idx, l, cnt;
		
		for(int i=2; i<n-1; i++) {
			idx = 2*c - i;
			P[i] = (i > r) ? 0 : ((P[idx]>(r-i)) ? r-i : P[idx]);
			while(tmp[i-P[i]]==tmp[i+P[i]]) {
				
				nw_str = tmp.substr(i-P[i],2*P[i]+1);
				cnt = mp[nw_str]++;
				//cout<<tmp.substr(i-l,l*2+1)<<endl;
				val = (cnt+1)*P[i];
				mx = (mx < val) ? val : mx;
				P[i]++;
			}
			P[i]--;
			if((i+P[i])>r) {
				r = i + P[i];
				c = i;
			}
		}
		cout<<mx<<endl;
	}
	return 0;
}

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:26:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |   for(int i=0; i<str.size(); i++) {
      |                ~^~~~~~~~~~~
palindrome.cpp:38:12: warning: unused variable 'l' [-Wunused-variable]
   38 |   int idx, l, cnt;
      |            ^
#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...