# PBinfo #4588 – pin – Rezolvare C++

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

## Enunț

Piticul Doc și-a securizat pin-ul cardului bancar într-un mod cunoscut doar de el. Pin-ul este format din exact 4 cifre. Doc dispune de o mulțime de informații numerice dispuse pe R rânduri. Fiecare cifră din pin-ul cardului bancar este un element majoritar pe rândul său, adică numărul de apariții ale cifrei respective este mai mare decât n / 2, unde n reprezintă numărul total de cifre de pe rândul respectiv. Tu poți afla pin-ul lui Doc sau crezi că a greșit securizarea pin-ului?

Cerința
Cunoscând numărul R de rânduri și numerele de pe fiecare rând, scrieţi un program care să determine pin-ul lui Doc.

Date de intrare
Fișierul de intrare pin.in conține pe prima linie numărul R care reprezintă numărul de rânduri. Pe fiecare dintre următoarele R linii se află un set de maxim 2024 de numere naturale.

Date de ieșire
Fișierul de ieșire pin.out va conține o singură linie pe care va fi scris mesajul PIN CORECT urmat de un număr natural reprezentând pin-ul lui Doc sau mesajul PIN INCORECT urmat de un număr reprezentând greșeala lui Doc în securizarea pin-ului.

Restricții și precizări

R este un număr natural, 4 ≤ R ≤ 1000.
numerele din fiecare rând au maximum 9 cifre și sunt separate printr-un singur spațiu.
se garantează existența cel puțin a unei cifre majoritare.
cifrele pin-ului sunt alese în ordinea parcurgerii rândurilor de la rândul 1 la R.
datorită dimensiunilor prea mari, nu au fost adăugate toate testele

Exemplul 1:
pin.in

5
17 111 4112 1019 1 23
45 3033 3 8 3033 48899
45 3033 3 8 3033
100 200 300
77777
pin.out

PIN CORECT 1307
Explicație
Prima cifră a pin-ului este 1 aflată din rândul 1.
A doua cifră din pin-ul lui Doc este 3 (rândul 3).
A treia cifră este 0 aflată din rândul 4.
Ultima cifră, a 4-a, este dedusă din rândul 5.
Pin-ul are EXACT 4 cifre deci este corect.

Exemplul 2:
pin.in

7
17 123 4112 4049 8 23 6788
45 3033 3 8 3033 48899
45 3033 3 8 3033
100 200 300
7890
1 2 3 4 5 6 7 8 9
0 0 0 9 9 9 888 666
pin.out

PIN INCORECT 30
Explicație
Doc a greșit în securizarea pin-ului deoarece pin-ul are doar 2 cifre:
Cifra 3 aflată din rândul 3 și 
Cifra 0 aflată din rândul 4.

## Cod sursă C++

```cpp
//Serban Marinel - ianuarie 2024
#include <bits/stdc++.h>
#define L 20241
using namespace std;
ifstream fin("pin.in");
ofstream fout("pin.out");
char randul[L];        //maxim 2024 numere a cate 9 cifre + 1 spatiu intre ele
char pin[1001];        //aici voi construi pin-ul
int lgpin;             //lungime pin - daca depaseste 4 - stop nu-i bun
int lgrand;            //numar cifre in rand
int R, r, i, c;
int main()
{
    fin >> R;                   //numar randuri
    fin.get();
    for (r = 1; r <= R; ++r)    //pentru fiecare rand
    {
        fin.getline(randul, L); //citesc tot randul
        int cifre[10] = {0};    //pun pe 0 un vector de aparitii
        lgrand = 0;
        i = 0;                  //plec de la inceputul randului
        while (randul[i] != 0)  //daca nu am ajuns la sfarsitul randului
        {
            if (randul[i] != ' ')//daca e cifra
            {
                ++lgrand;        //numar cifra
                c = randul[i] - 48;//determin cifra
                ++cifre[c];      //si o numar
            }
            ++i;                 //trec la alt caracter
        }
        for (c = 0; c < 10; ++c)
            if (cifre[c] > lgrand / 2) //c este element majoritar
            {
                pin[lgpin] = (char)(c + 48);//il adaug la pin
                lgpin++;                    //si numar
            }
    }
    pin[lgpin] = 0;                         //inchei sirul pin
    if (lgpin == 4)                         //daca are exact 4 cifre
        fout << "PIN CORECT " << pin << '\n';//este corect
    else
        fout << "PIN INCORECT " << pin << '\n';//este incorect
    return 0;
}
```

## Resurse

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