感谢各位抽出时间帮我调题的大佬,废物调了一小时没看出哪错了
略
#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;
}