多校的一题竟然没做出来。
方法是枚举对称中心,然后向两边尺取法.
#include <bits/stdc++.h>
using namespace std;
int len, m, ans;
char s[5007];
void judge(int x, int y)
{
int dis, l, r;
dis = l = r = 0;
while(y + r < len && x - r >= 0) {
if(dis + abs(s[y + r] - s[x - r]) <= m) {
dis += abs(s[y + r] - s[x - r]);
r ++;
ans = max(ans, r - l);
} else {
dis -= abs(s[y + l] - s[x - l]);
l ++;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T --) {
ans = 0;
scanf("%d%s",&m,s);
len = strlen(s);
for(int i = 0;i < len;i ++) {
judge(i,i + 1);
judge(i - 1,i + 1);
}
printf("%d\n", ans);
}
return 0;
}