求dalao调教
查看原帖
求dalao调教
1232566
Wh1t3zZlo楼主2024/9/9 16:56
#include<iostream>
#include<string>
#include<set>
#include<algorithm>

#define int long long

using namespace std;

int dp[200005];

int Hash(string x)
{
	int ans = 0;
	for (int i = 0; i < x.size(); i++) ans = ans * 131 + x[i] - 'a' + 1;
	return ans;
}

set<int>s;

signed main()
{
	string a;
	int ans = 0;
	dp[0] = 1;
	int len = 0;
	while (a!=".")
	{
		cin >> a;
		s.insert(Hash(a));
		if (a.size() > len)
		{
			len = a.size();
		}
	}

	cin >> a;
	a = " " + a;
	for (int i = 1; i < a.size(); i++)
	{
		for (int j = i - len+1; j <= i; j++)
		{
			if (j > 0)
			{
				string c = a.substr(j, i-j+1);
				if (s.count(Hash(c)))
				{
					dp[i] = max(dp[i], dp[j-1]);
				}
			}
		}
		if (dp[i])
		{
			ans = max(ans, i);
		}
	}
	cout << ans;
	return 0;
}

我看了我思路和题解都一样,求调教5555555

2024/9/9 16:56
加载中...