PAT Grado B 1040 tiene varios PAT 25 (puntos)

tema

La cadena APPAPT contiene dos palabras PAT , la primera de las cuales PAT es una segunda posición ( P ), bit 4 ( A ), bit 6 ( T ); la segunda PAT es el bit 3 ( P ), bit 4 ( A ), 6 bit ( T ).

Dada una cuerda, ¿cuántos se pueden formar en total PAT ?

Formato de entrada:

Una sola línea de entrada que comprende una cadena de no más de 10 510 ^ 5 . 1 0 ? 5 ? ? , Contiene solamente , , tres tipos de letras. P A T

Formato de salida:

Imprime cuántos de la cadena dada contiene en una línea PAT . Dado que el resultado puede ser relativamente grande, solo se emite el resultado de tomar el resto de 1000000007.

Muestra de entrada:

APPAPT

Salida de muestra:

2

Código


#include<iostream>
using namespace std;
int main()
{
    
    
	long long cal = 0;
	long long *p=new long long[100000], * a = new long long[100000], * t = new long long[100000], i = 0;
	string in="";
	cin >> in;
	for (i = 0; i < 100000; i++)
	{
    
    
		p[i] = 0;
		a[i] = 0;
		t[i] = 0;
	}
	i = 0;
	while (in[i++] != '\0')
		if (in[i - 1] == 'P')
			p[i-1]++;
		else if(in[i - 1] == 'A')
			a[i-1]++;
		else if(in[i - 1] == 'T')
			t[i-1]++;
	for (i = 99998; i >= 0; i--)
		t[i] += t[i + 1];
	for (i = 0; i < 100000; i++)
		a[i] *= t[i];
	for (i = 99998; i >= 0; i--)
		a[i] += a[i + 1];
	for (i = 0; i < 100000; i++)
		if (p[i] != 0)
			cal += p[i] *a[i];
	cout << cal % 1000000007;
	return 0;
}

Enlace de detalles de la pregunta

Supongo que te gusta

Origin blog.csdn.net/qq_41985293/article/details/115035365
Recomendado
Clasificación