Submission #994110

# Submission time Handle Problem Language Result Execution time Memory
994110 2024-06-07T06:36:29 Z vjudge1 Rima (COCI17_rima) C++17
56 / 140
488 ms 79168 KB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const long long mod = 1LL<<42;
const int M = 3e6, N = M/20;

long long pw[M];
bool not_pr[N];

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL),cout.tie(NULL);
	vector<long long> hashes;
	for (int i=2;i<N;i++)
		for (int j=i+i;j<N;j+=i)
			not_pr[j]=true;
	for (int i=100;i<N;i++)
		if (!not_pr[i])
		{
			hashes.push_back(i);
			i+=100;
		}
	srand(time(NULL));
	srand(rand());
	long long h=hashes[rand()%1372];
	
	pw[0]=1;
	for (int i=1;i<M;i++)
		pw[i]=pw[i-1]*h%mod;
	int n;
	cin>>n;
	map<int,vector<string>> mp;
	for (int i=0;i<n;i++)
	{
		string s;
		cin>>s;
		mp[s.size()].push_back(s);
	}
	vector<string> v;
	for (auto i:mp)
		for (auto j:i.second)
			v.push_back(j);
	reverse(v.begin(),v.end());
	unordered_map<long long,int> ans;
	ans.reserve(1000369);
	while (!v.empty())
	{
		string s=v.back();
		v.pop_back();
		long long hs=0,m=s.size();
		for (int i=1;i<m;i++)
			hs=hs*h+s[i],hs%=mod;
		int mx;
		if (ans.find(hs)!=ans.end())
			mx=ans[hs]+1;
		else
			mx=1;
		vector<long long> wht;
		long long p;
		for (int c='a';c<='z';c++)
		{
			p=hs;
			p+=pw[m-1]*c%mod;
			p%=mod;
			if (ans.find(p)!=ans.end())
				mx=max(mx,ans[p]+1),wht.push_back(p);
			else if(c==(int)s[0])
				wht.push_back(p);
		}
		for (long long i:wht)
			ans[i]=mx;
	}
	int res=0;
	for (auto i:ans)
		res=max(res,i.second);
	cout<<res<<endl;
	
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 20 ms 32348 KB Output is correct
2 Correct 20 ms 32212 KB Output is correct
3 Correct 20 ms 32348 KB Output is correct
4 Incorrect 488 ms 79168 KB Output isn't correct
5 Correct 35 ms 38480 KB Output is correct
6 Incorrect 28 ms 34248 KB Output isn't correct
7 Incorrect 25 ms 34216 KB Output isn't correct
8 Incorrect 23 ms 33936 KB Output isn't correct
9 Incorrect 43 ms 40336 KB Output isn't correct
10 Incorrect 22 ms 33836 KB Output isn't correct