2292 - Nevricos

De la Universitas MediaWiki

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.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))