求助
查看原帖
求助
179871
Lithium_Chestnut楼主2024/7/29 16:49

写了个暴力,想和 manacher 对拍,结果暴力挂了,求助 rt

#include<bits/stdc++.h>
#define Std_Maker lhm
#define ll long long
using namespace std;
const int N=1e6+1,mod=19930726; 
ll l,k,maxn=-1,cnt,sum,num[N],ans=1;
string s;
string manacher(string s)
{
	string ins;
	ins+="#";
	for(int i=0;i<s.length();i++)
	{
		if(i!=s.length()-1) ins+=s[i],ins+="$";
		else ins+=s[i],ins+="@";
	}
	return ins;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>l>>k;
	cin>>s;
	s=manacher(s);
	for(int i=1;i<=l*2;i++)
	{
		cnt=0;
		if(s[i]=='@') break;
		if(s[i]=='$')
		{
			for(int j=1;;j++)
			{
				if(i<j) break;
				if(s[i-j]==s[i+j])
				{
					if(s[i-j]!='$')
					{
						cnt+=2;
						sum++;
						num[sum]=cnt;
						//cout<<cnt<<endl;
					}
				}
				else break;
			}
		}
		else
		{
			cnt=1;
			for(int j=1;;j++)
			{
				if(i<j) break;
				if(s[i-j]==s[i+j])
				{
					if(s[i-j]!='$')
					{
						cnt+=2;
						sum++;
						num[sum]=cnt;
						//cout<<cnt<<endl;
					}
				}
				else break;
			}
		}
	}
	sort(num+1,num+sum+1);
	if(sum<k) cout<<-1;
	else
	{
		for(int i=sum;i>=sum-k+1;i--)
		{
			ans=(ans*num[i])%mod;
		}
		cout<<ans;
	}
	return 0;
}
2024/7/29 16:49
加载中...