Vasya y String CodeForces-676C (método de regla)

El estudiante de secundaria Vasya recibió una cadena de longitud n como regalo de cumpleaños. Esta cadena consta de letras 'a' y 'b' solamente. Vasya denota la belleza de la cadena como la longitud máxima de una subcadena (subsecuencia consecutiva) que consiste en letras iguales.

Vasya no puede cambiar más de k caracteres de la cadena original. ¿Cuál es la máxima belleza de la cuerda que puede lograr?

Entrada
La primera línea de la entrada contiene dos enteros n y k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n): la longitud de la cadena y el número máximo de caracteres a cambiar.

La segunda línea contiene la cadena, que consta de letras 'a' y 'b' solamente.

Salida
Imprime el único entero: la belleza máxima de la cadena que Vasya puede lograr cambiando no más de k caracteres.

Ejemplos
Entrada
4 2
abba
Salida
4
Entrada
8 1
aabaabaa
Salida
5
Nota
En la primera muestra, Vasya puede obtener ambas cadenas "aaaa" y "bbbb".

En la segunda muestra, la respuesta óptima se obtiene con la cadena "aaaaabaa" o con la cadena "aabaaaaa".
Idea: Debido a que solo hay dos letras, las consideramos por separado, reemplazando 'a' por 'b' una y otra vez Al revés Al cambiar letras, el método principal es el método de la regla. Hay un poco más de detalles, y se necesita más consideración.
El código es el siguiente:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
 
const int maxx=1e5+100;
string s;
int n,k;
 
inline int fcs(char c)
{
	int l=0,r=0;
	int _max=0,sum=0;
	while(r<n)
	{
		while(sum<=k&&r<n)
		{
			if(s[r]==c) sum++;
			r++;
		}
		if(sum>k) r--,sum--;
		_max=max(_max,r-l);
		while(sum>=k&&l<n)
		{
			if(s[l]==c) sum--;
			l++;
		}
	}
	return _max;
}
int main()
{
	scanf("%d%d",&n,&k);
	cin>>s;
	printf("%d\n",max(fcs('a'),fcs('b')));
	return 0;
}

Vamos duro, ( o ) / ~

Publicado 652 artículos originales · ganó 101 · vistas 50,000+

Supongo que te gusta

Origin blog.csdn.net/starlet_kiss/article/details/105465575
Recomendado
Clasificación