比赛 NOIP2023模拟赛3 评测结果 AAAAWAAAAAAAAAAAAAAA
题目名称 收集弹珠 最终得分 95
用户昵称 ┭┮﹏┭┮ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-15 09:21:26
显示代码纯文本
#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++){
//        cout<<l[i]<<' '<<r[i]<<endl;
//    }
    for(int i = 1;i <= len;i++){
        int x = l[i],y = r[i],k = n,lenl = i-1,lenr = i+1;
        while(k){
            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];
            }
        }
        ans = max(ans,lenr-lenl-1);
//        cout<<lenr-lenl-1<<endl;
    }
    printf("%d\n",ans);
    
    return 0;
    
}