可爱萌新妹子刚学OI 10^-114514秒求优化
  • 板块灌水区
  • 楼主lfxxx_
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/7/16 19:29
  • 上次更新2024/7/16 20:27:22
查看原帖
可爱萌新妹子刚学OI 10^-114514秒求优化
795344
lfxxx_楼主2024/7/16 19:29

这道题 求一位卡常大佬

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=25,M=2e6+5;
int n,m,l[N];
bool dp[M];
ull hs[N],ht[M],pw[M];
ull query(int l,int r){return ht[r]-ht[l-1]*pw[r-l+1];}
void solve()
{
	memset(dp,0,sizeof dp);
	string s;
	cin>>s;
	int len=s.size(),ans=0;
	s="#"+s;
	for(int i=1;i<=len;++i)
		ht[i]=ht[i-1]*131+s[i];
	dp[0]=1;
	for(int i=0;i<=len;++i)
		for(int j=1;j<=n;++j)
		{
			if(i+l[j]>len)
				continue;
			if(query(i+1,i+l[j])==hs[j])
				dp[i+l[j]]|=dp[i];
		}
	for(int i=len;i>=0;--i)
		if(dp[i])
		{
			cout<<i<<'\n';
			return ;
		}
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); 
	pw[0]=1;
	for(int i=1;i<M;++i)
		pw[i]=pw[i-1]*131;
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	{
		string s;
		cin>>s;
		l[i]=s.size();
		s="#"+s;
		for(int j=1;j<=l[i];++j)
			hs[i]=hs[i]*131+s[j];
	}
	while(m--)
		solve();
}

TLE #10 #11 #12

2024/7/16 19:29
加载中...