# PBinfo #2292 – Nevricos – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

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
Explicație
S = 153175

a. Toate secvențele lui S sunt: 1, 15, 153, 1531, 15317, 153175, 5, 53, 531, 5317, 53175, 3, 31, 317, 3175, 1, 17, 175, 7, 75, 5; 

Dintre aceste secvențe, doar secvența 15 satisface proprietatea cerută: 15 = (1*5) + (1*5) + (1*5); 

b. Subșirurile lui S care îndeplinesc condițiile sunt: 15 ( 1 5 3 1 7 5), 15 ( 1 5 3 1 7 5 ), 15 (1 5 3 1 7 5 ).

## Cod sursă C++

```cpp
//100p
#include "fstream"
std::ifstream cin("nevricos.in");
std::ofstream cout("nevricos.out");
long long Se, Ss, nr1, nr2;
int main(){
    char x, y;
    cin >> x;
    for(;cin >> y;){
        if(x == '1')
            ++ nr1;
        else if(x == '2')
            ++ nr2;
        if(y == '5'){
            Ss += nr1;
                if(x == '1')
                    ++ Se;
        }
        else if(y == '4'){
            Ss += nr2;
                if(x == '2')
                    ++ Se;
        }
        x = y;
    }
    cout<<Se<<'\n'<<Ss;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2292)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2292/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2292/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
