Submission #1335194

#TimeUsernameProblemLanguageResultExecution timeMemory
1335194Faisal_SaqibRima (COCI17_rima)C++20
0 / 140
400 ms327680 KiB
#include <iostream>
#include <map>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const long long mod=1e9+7;
const int N=5e5+10;
string s[N];
int dp[N],ans=0;
const int M=3e6+100;
map<long long,int> z[M],o[M];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s[i];
	}
	for(int i=0;i<n;i++)
	{
		int l=s[i].size();
		int ohsh=0,zhsh=0;
		for(int j=l-1;j>=0;j--)
		{
			zhsh=(1ll*zhsh*29+(s[i][j]-'a'+1))%mod;
			if(j==1)ohsh=zhsh;
		}
		dp[i]=max({z[l-1][ohsh],z[l][zhsh],o[l][ohsh],o[l+1][zhsh]})+1;
		// cout<<"at "<<i<<' '<<s[i]<<' '<<dp[i]<<endl;
		z[l][zhsh]=max(z[l][zhsh],dp[i]);
		o[l][ohsh]=max(o[l][ohsh],dp[i]);
		ans=max(ans,dp[i]);
	}
	cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...