| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 43418 | _Yuyuyu_ | 【J】T4 | C++ | 解答错误 | 0 | 116 MS | 46420 KB | 1098 | 2026-10-29 15:19:40 |
#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++; } 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? */