fbpx

Problema #1098 – Reteta – Rezolvari PBInfo

de Mihai-Alexandru

Mama mea este profesoară de informatică, dar îi place foarte mult să gătească. Recent am descoperit caietul ei de reţete, care arată foarte neobişnuit. Fiecare reţetă este scrisă pe un singur rând pe care sunt precizate produsele folosite, cantităţile, precum şi ordinea în care se execută operaţiile. De exemplu:

Exemplu

reteta.in

(((zahar 100 ou 3)5 unt 100 nuca 200)4 (lapte 200 cacao 50 zahar 100) 3)20

reteta.out

32
cacao 50
lapte 200
nuca 200
ou 3
unt 100
zahar 200
#include <bits/stdc++.h>

using namespace std;

ifstream cin("reteta.in");
ofstream cout("reteta.out");

map<string , int> M;

bool cif(char ch)
{
    return ch >= '0' && ch <= '9';
}

bool lit(char ch)
{
    return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}

int main()
{
    char s[1001];
    cin.getline(s , 1001);
    int i = 0;
    string t;
    int su = 0;
    int nr = 0;
    while(s[i])
    {
        if(cif(s[i]) || lit(s[i]))
        {
            bool ok = false;
            while(cif(s[i]))
            {
                ok=true;
                nr = nr * 10 + s[i] - '0';
                i++;
            }
            while(lit(s[i]))
            {
                t = t + s[i];
                i++;
                nr = 0;
            }
            if(nr!=0 && t != "" && ok)
                M[t]+=nr , nr = 0 , t = "";
            i--;
        }
        else if(s[i]==')')
        {
            i++;
            while(s[i]==' ')
                i++;
            int ci = 0;
            while(cif(s[i]))
            {
                ci = ci * 10 + s[i] - '0';
                i++;
            }
            i--;
            su+=ci;
        }
        i++;
    }
    cout << su << endl;
    for(auto x:M)
        cout << x.first << ' ' << x.second << endl;
    return 0;
}
Comentarii

S-ar putea sa iti placa