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
<syntaxhighlight lang="python" line="1"> with open("nevricos.intxt", "r") as cin:
with open("nevricos.outtxt", "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))
</syntaxhighlight>