比赛 NOIP2023模拟赛3 评测结果 WWWWWWWWAWWWWWWWWWWW
题目名称 收集弹珠 最终得分 5
用户昵称 黄天乐 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-15 12:07:51
显示代码纯文本
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,cnt1,cnt2;
int ans;
int l[5005],r[5005];
string a;
int main(){
    freopen("ball.in","r",stdin);
    freopen("ball.out","w",stdout);
    cin>>a>>n;
    for(int i=13;i<a.length();i++){
        int q=n;
        memset(l,0x3f,sizeof(l));
        memset(r,0x3f,sizeof(r));
        cnt1=0,cnt2=0;
        for(int j=i-1;j>=0;j--){
            if(a[j]==a[i]){
                cnt1++;
                l[cnt1]=i-j-1;
            }
        } 
        for(int j=i+1;j<a.length();j++){
            if(a[j]==a[i]){
                cnt2++;
                r[cnt2]=j-i-1;
            }
        }
        int cnt=max(cnt1,cnt2);
        int sum1=0,sum2=0;
        bool flag=false;
        int j=1;
        int k=1;
        for(j=1;j<=cnt1;j++){
            for(k=1;k<=cnt2;k++){
                if(q<(l[j]-sum1)&&q<(r[k]-sum2)){
                    flag=true;
                    break;
                }
                if((l[j]-sum1)==(r[k]-sum2)){
                    for(int p=1;p<=cnt;p++){
                        if((l[j-p]-sum1)<(r[k-p]-sum2)){
                            q=q-(l[j]-sum1);
                            sum1++;
                            j++;
                            break;
                        }
                        if((l[j]-sum1)>(r[k]-sum2)){
                            q=q-(r[k]-sum2);
                            sum2++;
                            k++;
                            break;
                        }
                    }
                }
                if((l[j]-sum1)<(r[k]-sum2)){
                    q=q-(l[j]-sum1);
                    sum1++;
                    j++;
                }
                if((l[j]-sum1)>(r[k]-sum2)){
                    q=q-(r[k]-sum2);
                    sum2++;
                    k++;
                }
            }
            if(flag)break;
        }
        for(int x=j;x<=cnt1;x++){
            if(q<l[j]-sum1)break;
            q=q-(l[j]-sum1);
        } 
        for(int y=k;y<=cnt2;y++){
            if(q<r[k]-sum2)break;
            q=q-(l[j]-sum2);
        } 
        ans=max(ans,sum1+sum2+1);
        break;
    }
    cout<<ans<<endl;
    return 0;
}