70pts求助
查看原帖
70pts求助
385748
渡鸦2007楼主2022/5/15 16:46

感谢各位抽出时间帮我调题的大佬,废物调了一小时没看出哪错了

#define hash qwqwq
#define int long long
char s[123];
int dp[123][123];
int hash[123];
bool check(int l,int k,int r)
{
	if ((r-l+1)%(k-l+1)!=0)return false;
	for (int i=l;i<=r;i+=(k-l+1))
	{
		if ((hash[i+k-l]-hash[i-1]+77270623)%77270623 == (hash[k]-hash[l-1]+77270623)%77270623)
		{
			
		}
		else
		{
			return false;
		}
	}
	return true;
}
signed main()
{
	//freopen("cuttle.in","r",stdin);
	//freopen("cuttle.out","w",stdout);
	//cout<<(int)(floor)(log10(100)+1);
	scanf("%s",s+1);int sl=strlen(s+1);
	memset(dp,0x3f,sizeof dp);
	for (int i=1;i<=sl;++i)
	{
		for (int j=i;j<=sl;++j)
		{
			dp[i][j]=j-i+1;
		}
		hash[i]=hash[i-1]+s[i]*23333;
		hash[i]%=77270623;
	}
	for (int len=2;len<=sl;++len)
	{
		for (int l=1;l<=sl-len+1;++l)
		{
			int r=l+len-1;
			for (int k=l;k<r;++k)//分割点
			{
				if (check(l,k,r))
				{
					dp[l][r]=min(dp[l][r] , dp[l][k]+2+ (int)(floor)( log10( (r-l+1)/(k-l+1) ))+1 );
				}
				dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
			}
		}
	}
	cout<<dp[1][sl];
	fclose(stdin);
	fclose(stdout);
	return 0;
}

2022/5/15 16:46
加载中...