记录编号 |
584769 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
收集弹珠 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2023-11-15 13:09:06 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int n,len,ans;
char a[N];
int la[500],nx[500];
int l[N],r[N];
int main(){
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
scanf("%s%d",a+1,&n);
len = strlen(a+1);
for(int i = 1;i <= len;i++){
if(la[a[i]])l[i] = la[a[i]];
la[a[i]] = i;
}
for(int i = len;i >= 1;i--){
if(nx[a[i]])r[i] = nx[a[i]];
nx[a[i]] = i;
}
for(int i = 1;i <= len;i++){
int x = l[i],y = r[i],k = n,lenl = i-1,lenr = i+1;
do{
if(!x && !y)break;
int d1 = INT_MAX,d2 = INT_MAX;
if(x)d1 = lenl - x;
if(y)d2 = y - lenr;
if(d1 < d2){
if(k < d1)break;
k -= d1;
lenl--,x = l[x];
}
else{
if(k < d2)break;
k -= d2;
lenr++,y = r[y];
}
}while(1);
ans = max(ans,lenr-lenl-1);
}
printf("%d\n",ans);
return 0;
}