提交时间:2026-10-29 15:18:44

运行 ID: 43417

#include<bits/stdc++.h> using namespace std; #define int long long int n,k,ans,cf[3005]; char c[3005]; int dp[3005][3005]; signed main(){ cin>>n>>k; for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ dp[i][j]=0; } } c[n+1]='/'; for(int i=1;i<n;i++)cf[i]=0; for(int d=1;d<n;d++){ int _=0,len=0; for(int i=d,j=i+d;i<=n,j<=n;i++,j++){ while(_<=k&&j+len<=n+1){ _+=(c[i+len]!=c[j+len]); len++; } if(len>n)len--; dp[i][j]=len; len--; _-=(c[i]!=c[j]); } } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ cf[i]++; int tmp=min(dp[i][j],j-i); cf[i+tmp]--; cf[j]-=tmp; cf[j+1]+=tmp; } } for(int i=1;i<n;i++)cf[i]+=cf[i-1]; for(int i=1;i<n;i++)cf[i]+=cf[i-1]; for(int i=1;i<=n-1;i++)cout<<cf[i]<<endl; return 0; } /* 思路: 1:dp? */