2292 - Nevricos
Se consideră un șir S format din N cifre nenule.
O secvență a șirului S este o succesiune de cifre din S care apar pe poziții consecutive. Un număr X asociat unei secvențe din S este numărul în baza 10 care se formează cu toate cifrele din secvența respectivă, în ordinea în care apar în aceasta.
Un subșir al șirului S este o succesiune de cifre din S care apar în S pe pozițiile p 1 , p 2 , … , p k astfel încât p 1 < p 2 < … < p k și k <= N . Un număr X asociat unui subșir al lui S este numărul în baza 10 care se formează cu toate cifrele din subșirul respectiv, în ordinea în care apar în acesta.
Un număr X se numește nevricos dacă este egal cu triplul produsului cifrelor lui X.
Cerința
a. Dându-se un șir S de cifre nenule, să se determine câte dintre secvențele din S au numere asociate nevricoase.
b. Dându-se un șir S de cifre nenule, să se determine câte dintre subșirurile lui S au numere asociate nevricoase.
Date de intrare
Fișierul de intrare nevricos.in conține pe prima linie șirul S de cifre nenule.
Date de ieșire
Fișierul de ieșire nevricos.out va conține două linii:
pe prima linie numărul de secvențe din S care au asociate numere nevricoase.
pe a doua linie numărul de subșiruri ale lui S care au asociate numere nevricoase.
Restricții și precizări
* Șirul S va conține maxim 1.000.000 de cifre
Exemplu:
nevricos.in
153175
nevricos.out
1 3
Încărcare soluție
Lipește codul aici
with open("nevricos.in", "r") as cin:
with open("nevricos.out", "w") as cout:
Se, Ss, nr1, nr2 = 0, 0, 0, 0
x = cin.read(1)
while True:
y = cin.read(1)
if not y:
break
if x == '1':
nr1 += 1
elif x == '2':
nr2 += 1
if y == '5':
Ss += nr1
if x == '1':
Se += 1
elif y == '4':
Ss += nr2
if x == '2':
Se += 1
x = y
cout.write(str(Se) + '\n' + str(Ss))