Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- struct info {
- double belki, jir, ugl, energy;
- };
- int main() {
- int n;
- cin>>n;
- map <string,vector <pair<string,int> > > dishes;//name, list of ingred {name,number}
- map <string,int> ingred; //name, kolichestvo for all dishes
- for (int i = 0; i < n; i++) // dishes
- {
- string d;
- cin>>d;
- int c,z;
- cin>>c>>z;
- vector <string> ingred_for_dish;
- for (int j = 0; j < z; j++) // info about dishes
- {
- string s,u;
- cin>>s;
- int a;
- cin>>a>>u;
- if (u == "kg") a *= 1000;
- if (u == "l") a *= 1000;
- if (u == "tens") a *= 10;
- if (ingred.find(s) != ingred.end())
- {
- ingred[s] += c*a;
- }
- else
- {
- ingred.insert({s,c*a});
- }
- ingred_for_dish.push_back({s,c*a});
- }
- dishes.insert({d,ingred_for_dish});
- }
- int k;
- cin>>k;
- map<string,pair<int,int> > prices; // name, price, number in the box
- for (int i = 0; i < k; i++)
- {
- string t;
- cin>>t;
- int p; // price
- cin>>p;
- int a; //number of ingredient
- cin>>a;
- string u;
- cin>>u;
- if (u == "kg") a *= 1000;
- if (u == "l") a *= 1000;
- if (u == "tens") a *= 10;
- prices.insert({t,{p,a}});
- }
- int m;
- cin>>m;
- map<string,pair< int,info> > INFO; //name, size , info
- for (int i = 0; i < m; i++)
- {
- string t;
- cin>>t;
- int a; //number of ingredient for so fat & etc
- cin>>a;
- string u;
- cin>>u;
- if (u == "kg") a *= 1000;
- if (u == "l") a *= 1000;
- if (u == "tens") a *= 10;
- double belki, jir, ugl, energy;
- info in;
- cin>>belki>>jir>>ugl>>energy;
- in.belki = belki;
- in.jir = jir;
- in.ugl = ugl;
- in.energy = energy;
- INFO.insert({t,{a,info}});
- }
- int sum = 0;
- vector <int> ans_1;
- for (i = ingred.begin(); i != ingred.end(); i++)
- {
- string name = i->first;
- int kol = i->second;
- int pr = prices[name].first;
- int number_in_box = prices[name].second;
- int box = ceil(kol / number_in_box)
- int cur_sum = box * pr;
- sum+= cur_sum;
- ans_1.push_back(box);
- }
- cout<<sum<<endl;
- int j = 0;
- for (i = ingred.begin(); i != ingred.end(); i++)
- {
- string name = i->first;
- cout<<name<<" "<<ans_1[j]<<endl;
- j++;
- }
- for (i = dishes.begin(); i != dishes.end(); i++)
- {
- string name = i->first;
- vector <pair<string, int> > ing = i->second;
- cout<<name<<" ";
- double belki = 0;
- double jir = 0;
- double ugl = 0;
- double energy = 0;
- for (int j = 0; j < ing.size(); j++)
- {
- string ingred = ing[j].first;
- int kol = ing[j].second;
- int a = INFO[ingred].first;
- info IN = INFO[ingred].second;
- belki += kol * IN.belki / a;
- jir += kol * IN.jir / a;
- ugl += kol * IN.ugl / a;
- energy += kol * IN.energy / a;
- }
- cout<<belki<<" "<<jir<<" "<<ugl<<" "<<energy<<endl;
- }
- //map <string,vector <pair<string,int> > > dishes;//name, list of ingred {name,number}
- //map<string,pair< int,info> > INFO; //name, size , info
- //struct info {
- //double belki, jir, ugl, energy;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement