235
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