比赛 |
NOIP2023模拟赛3 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
收集弹珠 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2023-11-15 12:58:34 |
显示代码纯文本
#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;
}