2020 Winter Holiday [gmoj2194] [censor] [Simulación de pila]

Descripción del título

El granjero John ordenó a Good Hooves mantener revistas para sus vacas para que tengan suficientes materiales para leer. Desafortunadamente, el último número contiene artículos sobre cómo cocinar el filete perfecto, y FJ no quiere que sus vacas vean este artículo bastante indecente (obviamente, esta revista necesita una mejor supervisión editorial).
FJ tomó todo el texto de la revista y creó una cadena de caracteres s con una longitud menor o igual a 10 ^ 6. De ahora en adelante, quiere eliminar una subcadena T para revisar contenido inapropiado. Para hacer esto, el granjero John encuentra la T que aparece en S y la elimina. Luego, repite el proceso nuevamente, eliminando la T que aparece, hasta que la S no está presente. Tenga en cuenta que después de eliminar una vez, se puede crear una nueva T. Esta T no existía antes.
Envíe el contenido final de S determinado por FJ después de la revisión.

De entrada

La primera línea contendrá S y la
segunda línea contendrá T. La longitud de T es como máximo la longitud de S. Todos los caracteres de S y T son letras minúsculas (rango a ... z)

Salida

S después de la eliminación completa. Asegúrese de que S no se vacíe durante el proceso de eliminación.

Entrada de muestra

whatthemomooofun
moo

Salida de muestra

whatthefun

Análisis

Vamos a dar un poco de cxy aquí %%.
Realmente no puedo pensar en una simulación de pila ... Lo hice después de escuchar la explicación.
Presione un carácter a la vez, y luego determine si los caracteres de longitud (t) son iguales a t (cadena de patrón), y luego haga estallar la pila.
Inserte la descripción de la imagen aquí

Código en

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
string s,t,s1;
int l,len;
int p;
char c[1000001];
int main(){
	freopen("censor.in","r",stdin);
    freopen("censor.out","w",stdout);
	cin>>s;
	cin>>t;
    l=-1;
    len=s.size();
	for(int i=0;i<len;i++)
	{
        l++; 
        if((s[l]==t[t.size()-1])&&(l>=t.size()-1)) 
		{
        	p=1;
            for(int j=l-t.size()+1;j<=l;j++) 
            {
            	if(s[j]!=t[j-(l-t.size()+1)])
				{
                    p=0;
                    break;
                }
			}
            if(p!=0)
            {
            	s.erase(l-t.size()+1,t.size());
				l=l-t.size();
			}
        }
    }
    cout<<s;
    fclose(stdin);
    fclose(stdout);
    return 0;
}

110 artículos originales publicados · 100 alabanzas · vistas 8029

Supongo que te gusta

Origin blog.csdn.net/dglyr/article/details/104826975
Recomendado
Clasificación