比赛 NOIP2023模拟赛3 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 收集弹珠 最终得分 100
用户昵称 Murasame 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-15 12:58:06
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,ans=-1;
char s[5010];
int bef[5010],nxt[5010],l[5010],r[5010];
void init(){
	cin>>s+1>>n;
	for(int i=1;i<=strlen(s+1);i++){
		if(bef[s[i]]){
			l[i]=bef[s[i]];
		}
		bef[s[i]]=i;
	}
	for(int i=strlen(s+1);i>=1;i--){
		if(nxt[s[i]]){
			r[i]=nxt[s[i]];
		}
		nxt[s[i]]=i;
	}
}
void work(){
	int fir,fir1,sec,sec1,tmp=n;
	for(int i=1;i<=strlen(s+1);i++){
		fir=l[i];
		sec=r[i];
		tmp=n;
		int lans=i-1,rans=i+1;
		for(;tmp>=0;){
			if(fir==0&&sec==0){
				break;
			}
			fir1=0x3f3f3f3f;
			sec1=0x3f3f3f3f;
			if(fir){
				fir1=lans-fir;
			}
			if(sec){
				sec1=sec-rans;
			}
			if(fir1<sec1){
				if(tmp<fir1){
					break;
				}
				tmp-=fir1;
				lans--;
				fir=l[fir];
			}
			else{
				if(tmp<sec1){
					break;
				}
				tmp-=sec1;
				rans++;
				sec=r[sec];
			}
		}
		ans=max(ans,rans-lans-1);
	}
}
int main(){
	freopen("ball.in","r",stdin);
	freopen("ball.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	init();
	work();
	cout<<ans<<endl;
	return 0;
}