답안 #994086

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
994086 2024-06-07T06:07:26 Z vjudge1 Rima (COCI17_rima) C++17
56 / 140
625 ms 90436 KB
#include <bits/stdc++.h>

using namespace std;

const long long mod = 1LL<<36;
const int M = 3e6;

long long pw[M];

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL),cout.tie(NULL);
	vector<long long> hashes={149,369,(long long)1e6+1,7369,766369};
	srand(time(NULL)+7369);
	long long h=hashes[rand()%6];
	
	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);
	}
	unordered_map<long long,int> ans;
	for (auto what:mp)
	{
		unordered_map<long long,int> temp,cnt;
		for (auto s:what.second)
		{
			long long hs=0;
			int 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;
			for (int c='a';c<='z';c++)
			{
				if (ans.find((hs+pw[m-1]*c%mod)%mod)!=ans.end())
					mx=max(mx,ans[(hs+pw[m-1]*c%mod)%mod]+1);
			}
			temp[hs]=mx;
			cnt[hs]++;
		}
		for (auto s:what.second)
		{
			long long hs=0;
			int m=s.size();
			for (int i=1;i<m;i++)
				hs=hs*h+s[i],hs%=mod;
			char c=s[0];
			ans[(hs+pw[m-1]*c%mod)%mod]=temp[hs]+cnt[hs]-1;
		}
	}
	int res=0;
	for (auto i:ans)
		res=max(res,i.second);
	cout<<res<<endl;
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 23900 KB Output is correct
2 Correct 16 ms 23896 KB Output is correct
3 Correct 15 ms 23896 KB Output is correct
4 Incorrect 625 ms 90436 KB Output isn't correct
5 Correct 45 ms 29780 KB Output is correct
6 Incorrect 23 ms 25800 KB Output isn't correct
7 Incorrect 22 ms 25684 KB Output isn't correct
8 Incorrect 20 ms 25492 KB Output isn't correct
9 Incorrect 52 ms 31880 KB Output isn't correct
10 Incorrect 20 ms 25396 KB Output isn't correct