比赛 |
NOIP2023模拟赛3 |
评测结果 |
AAAAWAAAAAAAAAAAAAAA |
题目名称 |
收集弹珠 |
最终得分 |
95 |
用户昵称 |
┭┮﹏┭┮ |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2023-11-15 09:21:26 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int n,len,ans;
char a[N];
int la[500],nx[500];
int l[N],r[N];
int main(){
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
scanf("%s%d",a+1,&n);
len = strlen(a+1);
for(int i = 1;i <= len;i++){
if(la[a[i]])l[i] = la[a[i]];
la[a[i]] = i;
}
for(int i = len;i >= 1;i--){
if(nx[a[i]])r[i] = nx[a[i]];
nx[a[i]] = i;
}
// for(int i = 1;i <= len;i++){
// cout<<l[i]<<' '<<r[i]<<endl;
// }
for(int i = 1;i <= len;i++){
int x = l[i],y = r[i],k = n,lenl = i-1,lenr = i+1;
while(k){
if(!x && !y)break;
int d1 = INT_MAX,d2 = INT_MAX;
if(x)d1 = lenl - x;
if(y)d2 = y - lenr;
if(d1 < d2){
if(k < d1)break;
k -= d1;
lenl--,x = l[x];
}
else{
if(k < d2)break;
k -= d2;
lenr++,y = r[y];
}
}
ans = max(ans,lenr-lenl-1);
// cout<<lenr-lenl-1<<endl;
}
printf("%d\n",ans);
return 0;
}