# PBinfo #2484 – key – Rezolvare C++

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

## Enunț

Cristi are în sertar n chei vechi; fiecare a costat o anumită sumă exprimată în lei și fiecare a fost făcută pentru a deschide aceeași ușă. Atât cheile cât și ușa au un cod format din 3 litere. Din păcate, unele chei s-au deteriorat și Cristi le-a împărțit în patru categorii:


stricate – nicio o literă din codul cheii nu coincide cu litera de pe aceeași poziție din codul ușii, iar pentru a o repara trebuie sa plătească prețul integral al cheii;
deteriorate – exact o litera din codul cheii coincide cu litera de pe aceeași poziție din codul ușii, iar pentru a o repara trebuie sa plătească două treimi din prețul cheii;
slab deteriorate – exact două litere din codul cheii coincid cu literele de pe aceleași poziții din codul ușii, iar
pentru a o repara trebuie sa platească o treime din prețul cheii;
bune – codul cheii e identic cu codul ușii, iar cheia nu trebuie reparată;

Cerințe
1) Să se afle câte chei din fiecare categorie are Cristi.
2) Sa se afle cât a plătit Cristi pentru a repara toate cheile.

Date de intrare
Fișierul de intrare key.in conține pe prima linie un număr P, codul ușii COD și numarul n; dacă P=1 se rezolvă doar cerința 1, iar dacă P=2 se rezolva doar cerința 2. Pe următoarele n linii se citește codul cheii și prețul acesteia.

Date de ieșire
Dacă P=1 se afișează numărul de chei stricate, numărul de chei deteriorate, numărul de chei slab deteriorate și numărul de chei bune separate printr-un spațiu, în aceasta ordine.

Dacă P=2 se afișează doar un număr COST care exprima costul total pentru repararea cheilor.

Restricții și precizări

1 ≤ n ≤ 100
P=1 sau P=2
orice cod e format din 3 litere
orice preț este divizibil cu 3 și aparține intervalului deschis [0,999];
la cerința 2, dacă toate cheile sunt bune sau costul total este 0 se afișează doar mesajul GRATIS
pentru rezolvarea corectă a cerinței 1 se acordă 30 de puncte, iar pentru rezolvarea corectă a cerinței 2 se acordă 70 de puncte

Exemplu:
key.in


1 ABC 4
ABC 15
AXC 9
AFG 3
UYC 30
key.out


0 2 1 1
Explicație
Cristi nu are cheii stricate, dar are două cheii deteriorate, una slab deteriorata și una buna

Exemplu:
key.in


2 ABC 4
ABC 15
AXC 9
AFG 3
UYC 30
key.out

25

## Cod sursă C++

```cpp
#include <fstream>
char a[4],b[4];int s,d,f,g,P,n,c,t,m,k;
std::ifstream I("key.in");
std::ofstream O("key.out");
int main(){
    I>>P>>a>>n;
    while(n--){
        I>>b>>c;m=0,k=-1;
        while(++k<3)
            if(a[k]==b[k])++m;
        switch(m){
            case 0:t+=c;++s;break;
            case 1:t+=c/3*2;++d;break;
            case 2:t+=c/3;++f;break;
            case 3:++g;break;
        }
    }
    if(P==1)
        O<<s<<' '<<d<<' '<<f<<' '<<g;
    else
        if(t)O<<t;
        else O<<"GRATIS";
}
```

## Resurse

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