比赛 NOIP2023模拟赛3 评测结果 AAAAWAAAAAAAAAAAAAAA
题目名称 收集弹珠 最终得分 95
用户昵称 宇战 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-15 11:58:18
显示代码纯文本
#include<bits/stdc++.h>
    using namespace std;
    string a;
    int n,m,ans;
    int l[10000],r[10000];
    int main(){
        freopen("ball.in","r",stdin);
        freopen("ball.out","w",stdout);
          cin>>a;
          int len=a.size();
          cin>>n;
          memset(l,-1,sizeof(l));
          memset(r,-1,sizeof(r));
          for(int i=0;i<len;i++){
              for(int j=i+1;j<len;j++){
                  if(a[i]==a[j]){
                      r[i]=j;
                      break;
                  }
              }
              if(i==0)continue;
              for(int j=i-1;j>=0;j--){
                  if(a[i]==a[j]){
                      l[i]=j;
                      break;
                  }
              }
          }
          for(int i=0;i<len;i++){
              int k=n;
              int x=l[i];
              int y=r[i];
              int ll=i-1;
              int rr=i+1;
              while(k){
                  if(x==-1&&y==-1){
                      break;
                  }
                  int l1=0x3f3f3f3f,r1=0x3f3f3f3f;
                 if(x>=0) l1=ll-x;
                 if(y>=0) r1=y-rr;
                  if(r1>l1){
                      if(k<l1){break;
                      }
                      ll--;
                      x=l[x];
                      k-=l1;
                  }else{
                      if(k<r1)break;
                      rr++;
                      y=r[y];
                      k-=r1;
                  } 
                                     
              }
              ans=max(ans,rr-ll-1);   
          }
          cout<<ans;          
    }