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;
}