比赛 |
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;
}