记录编号 584769 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 收集弹珠 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 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;
    
}