比赛 NOIP2023模拟赛3 评测结果 WAWWWWWAAWWWWWWWWWWW
题目名称 收集弹珠 最终得分 15
用户昵称 黄天宇 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-15 11:22:49
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
string a;
int v[50005];
int n;
int x[105];//统计长度 
int maxx;
int s,t;
bool flag;
void dfs(int num,int sum,int start,int ans){//num表示交换的次数,sum表示长度,start表示起点
        if(num==n||ans>n-1){
            maxx=max(maxx,sum);                                       
            return;
        }
        if(start>a.length()-1){
            ans++;
            maxx=max(maxx,sum);
            dfs(0,sum,0,ans);
            return;
        }
        s=v[start];
        t=v[start+1];
        for(int i=0;i<a.length();i++){
            sum=max(sum,x[v[i]]+3);
            if(v[i]!=v[i+1]){
                x[v[i]]=0;
            }else
            x[v[i]]++;
        }
        if(v[start]!=v[start+1]&&start+1!=a.length()){
            swap(v[start],v[start+1]);
        }
        dfs(num+1,sum,start+1,ans);
        v[start]=s;
        v[start+1]=t;
        start--;
        num--;
}
int main(){
    freopen("ball.in","r",stdin);
    freopen("ball.out","w",stdout);
    cin>>a;
    cin>>n;
    for(int i=0;i<a.length();i++){
        v[i]=a[i]-64;
    }
    dfs(0,0,0,0);
    cout<<maxx<<endl;
    return 0;
}