#include<iostream>
#include<algorithm>
#include<sstream>
#include<map>
#include<vector>
using namespace std;
long balanc=0;
map<string,int>goodsCount;
map<string,int>goodsPrice;
map<string,int>coinCount;
vector<string> spliteString(string str,char c)
{
vector<string> res;
istringstream is(str);
string temp;
while(getline(is, temp,c)) res.push_back(temp);
return res;
}
vector<int> spliteInt(string str,char c)
{
vector<int> res;
istringstream is(str);
string temp;
while(getline(is, temp,c)) res.push_back(strtol(temp.c_str(), NULL,10));
return res;
}
void init(string str)
{
vector<string>res=spliteString(str,' ');
vector<int> goods=spliteInt(res[1],'-');
vector<int> coin=spliteInt(res[2],'-');
goodsCount["A1"]=goods[0];
goodsCount["A2"]=goods[1];
goodsCount["A3"]=goods[2];
goodsCount["A4"]=goods[3];
goodsCount["A5"]=goods[4];
goodsCount["A6"]=goods[5];
goodsPrice["A1"]=2;
goodsPrice["A2"]=3;
goodsPrice["A3"]=4;
goodsPrice["A4"]=5;
goodsPrice["A5"]=8;
goodsPrice["A6"]=6;
coinCount["1"]=coin[0];
coinCount["2"]=coin[1];
coinCount["5"]=coin[2];
coinCount["10"]=coin[3];
cout<<"S001:Initialization is successful"<<endl;
}
void pay(string str)
{
if(str.length()>2)
{
int value=strtol(str.substr(2).c_str(), NULL, 10);
if(value==1||value==2||value==5||value==10)
{
if(coinCount["1"]+coinCount["2"]*2 < value && value>2) cout<<"E003:Change is not enough, pay fail"<<endl;
else if(goodsCount["A1"]+goodsCount["A2"]+goodsCount["A3"]+goodsCount["A4"]+goodsCount["A5"]+goodsCount["A6"]==0) cout<<"E005:All the goods sold out"<<endl;
else{
coinCount[str.substr(2)]++;
balanc+=value;
cout<<"S002:Pay success,balance="<< balanc<<endl;
}
}else cout<<"E002:Denomination error"<<endl;
}else cout<<"E002:Denomination error"<<endl;
}
void buy(string str)
{
string goods=str.substr(2).c_str();
if(goodsCount.count(goods)==0) cout<<"E006:Goods does not exist"<<endl;
else if(goodsCount[goods]==0) cout<<"E007:The goods sold out"<<endl;
else if(goodsPrice[goods]>balanc) cout<<"E008:Lack of balance"<<endl;
else{
goodsCount[goods]--;
balanc-=goodsPrice[goods];
cout<<"S003:Buy success,balance="<< balanc<<endl;
}
}
void back()
{
if(balanc<=0) cout<<"E009:Work failure"<<endl;
else{
int a=0,b=0,c=0,d=0;
d=balanc/10;
if(d<=coinCount["10"])
{
coinCount["10"]-=d;
balanc-=10*d;
}else{
d=coinCount["10"];
balanc-=10*d;
coinCount["10"]=0;
}
c=balanc/5;
if(c<=coinCount["5"])
{
coinCount["5"]-=c;
balanc-=5*c;
}else{
c=coinCount["5"];
balanc-=5*c;
coinCount["5"]=0;
}
b=balanc/2;
if(b<=coinCount["2"])
{
coinCount["2"]-=b;
balanc-=2*b;
}else{
b=coinCount["2"];
balanc-=2*b;
coinCount["2"]=0;
}
a=balanc;
if(a<=coinCount["1"])
{
coinCount["1"]-=a;
balanc-=a;
}else{
a=coinCount["1"];
balanc-=a;
coinCount["1"]=0;
}
cout<<"1 yuan coin number="<< a<<endl;
cout<<"2 yuan coin number="<< b<<endl;
cout<<"5 yuan coin number="<< c<<endl;
cout<<"10 yuan coin number="<< d<<endl;
}
}
void info(string str)
{
if(str.length()>2)
{
int value=strtol(str.substr(2).c_str(), NULL, 10);
if(value==0)
{
vector<pair<pair<string,int>,int> >res;
res.push_back(make_pair(make_pair("A1", goodsPrice["A1"]), goodsCount["A1"]));
res.push_back(make_pair(make_pair("A2", goodsPrice["A2"]), goodsCount["A2"]));
res.push_back(make_pair(make_pair("A3", goodsPrice["A3"]), goodsCount["A3"]));
res.push_back(make_pair(make_pair("A4", goodsPrice["A4"]), goodsCount["A4"]));
res.push_back(make_pair(make_pair("A5", goodsPrice["A5"]), goodsCount["A5"]));
res.push_back(make_pair(make_pair("A6", goodsPrice["A6"]), goodsCount["A6"]));
sort(res.begin(),res.end(),[](const pair<pair<string,int>,int>& p1,const pair<pair<string,int>,int>& p2){
if(p1.second!=p2.second) return p1.second>p2.second;
else return p1.first.first < p2.first.first;
});
for(int i=0;i<res.size();i++)
cout<<res[i].first.first.c_str()<<" "<<res[i].first.second<<" "<<res[i].second<<endl;
}else if(value==1)
{
cout<<"1 yuan coin number="<< coinCount["1"]<<endl;
cout<<"2 yuan coin number="<< coinCount["2"]<<endl;
cout<<"5 yuan coin number="<< coinCount["5"]<<endl;
cout<<"10 yuan coin number="<< coinCount["10"]<<endl;
}else cout<<"E010:Parameter error"<<endl;
}else cout<<"E010:Parameter error"<<endl;
}
int main(int argc,char* argv[])
{
string input;
while(getline(cin,input))
{
vector<string>res=spliteString(input,';');
for(int i=0;i<res.size();i++)
{
switch(res[i][0])
{
case 'r':
init(res[i]);
break;
case 'p':
pay(res[i]);
break;
case 'b':
buy(res[i]);
break;
case 'c':
back();
break;
case 'q':
info(res[i]);
break;
}
}
}
return 0;
}
#include<algorithm>
#include<sstream>
#include<map>
#include<vector>
using namespace std;
long balanc=0;
map<string,int>goodsCount;
map<string,int>goodsPrice;
map<string,int>coinCount;
vector<string> spliteString(string str,char c)
{
vector<string> res;
istringstream is(str);
string temp;
while(getline(is, temp,c)) res.push_back(temp);
return res;
}
vector<int> spliteInt(string str,char c)
{
vector<int> res;
istringstream is(str);
string temp;
while(getline(is, temp,c)) res.push_back(strtol(temp.c_str(), NULL,10));
return res;
}
void init(string str)
{
vector<string>res=spliteString(str,' ');
vector<int> goods=spliteInt(res[1],'-');
vector<int> coin=spliteInt(res[2],'-');
goodsCount["A1"]=goods[0];
goodsCount["A2"]=goods[1];
goodsCount["A3"]=goods[2];
goodsCount["A4"]=goods[3];
goodsCount["A5"]=goods[4];
goodsCount["A6"]=goods[5];
goodsPrice["A1"]=2;
goodsPrice["A2"]=3;
goodsPrice["A3"]=4;
goodsPrice["A4"]=5;
goodsPrice["A5"]=8;
goodsPrice["A6"]=6;
coinCount["1"]=coin[0];
coinCount["2"]=coin[1];
coinCount["5"]=coin[2];
coinCount["10"]=coin[3];
cout<<"S001:Initialization is successful"<<endl;
}
void pay(string str)
{
if(str.length()>2)
{
int value=strtol(str.substr(2).c_str(), NULL, 10);
if(value==1||value==2||value==5||value==10)
{
if(coinCount["1"]+coinCount["2"]*2 < value && value>2) cout<<"E003:Change is not enough, pay fail"<<endl;
else if(goodsCount["A1"]+goodsCount["A2"]+goodsCount["A3"]+goodsCount["A4"]+goodsCount["A5"]+goodsCount["A6"]==0) cout<<"E005:All the goods sold out"<<endl;
else{
coinCount[str.substr(2)]++;
balanc+=value;
cout<<"S002:Pay success,balance="<< balanc<<endl;
}
}else cout<<"E002:Denomination error"<<endl;
}else cout<<"E002:Denomination error"<<endl;
}
void buy(string str)
{
string goods=str.substr(2).c_str();
if(goodsCount.count(goods)==0) cout<<"E006:Goods does not exist"<<endl;
else if(goodsCount[goods]==0) cout<<"E007:The goods sold out"<<endl;
else if(goodsPrice[goods]>balanc) cout<<"E008:Lack of balance"<<endl;
else{
goodsCount[goods]--;
balanc-=goodsPrice[goods];
cout<<"S003:Buy success,balance="<< balanc<<endl;
}
}
void back()
{
if(balanc<=0) cout<<"E009:Work failure"<<endl;
else{
int a=0,b=0,c=0,d=0;
d=balanc/10;
if(d<=coinCount["10"])
{
coinCount["10"]-=d;
balanc-=10*d;
}else{
d=coinCount["10"];
balanc-=10*d;
coinCount["10"]=0;
}
c=balanc/5;
if(c<=coinCount["5"])
{
coinCount["5"]-=c;
balanc-=5*c;
}else{
c=coinCount["5"];
balanc-=5*c;
coinCount["5"]=0;
}
b=balanc/2;
if(b<=coinCount["2"])
{
coinCount["2"]-=b;
balanc-=2*b;
}else{
b=coinCount["2"];
balanc-=2*b;
coinCount["2"]=0;
}
a=balanc;
if(a<=coinCount["1"])
{
coinCount["1"]-=a;
balanc-=a;
}else{
a=coinCount["1"];
balanc-=a;
coinCount["1"]=0;
}
cout<<"1 yuan coin number="<< a<<endl;
cout<<"2 yuan coin number="<< b<<endl;
cout<<"5 yuan coin number="<< c<<endl;
cout<<"10 yuan coin number="<< d<<endl;
}
}
void info(string str)
{
if(str.length()>2)
{
int value=strtol(str.substr(2).c_str(), NULL, 10);
if(value==0)
{
vector<pair<pair<string,int>,int> >res;
res.push_back(make_pair(make_pair("A1", goodsPrice["A1"]), goodsCount["A1"]));
res.push_back(make_pair(make_pair("A2", goodsPrice["A2"]), goodsCount["A2"]));
res.push_back(make_pair(make_pair("A3", goodsPrice["A3"]), goodsCount["A3"]));
res.push_back(make_pair(make_pair("A4", goodsPrice["A4"]), goodsCount["A4"]));
res.push_back(make_pair(make_pair("A5", goodsPrice["A5"]), goodsCount["A5"]));
res.push_back(make_pair(make_pair("A6", goodsPrice["A6"]), goodsCount["A6"]));
sort(res.begin(),res.end(),[](const pair<pair<string,int>,int>& p1,const pair<pair<string,int>,int>& p2){
if(p1.second!=p2.second) return p1.second>p2.second;
else return p1.first.first < p2.first.first;
});
for(int i=0;i<res.size();i++)
cout<<res[i].first.first.c_str()<<" "<<res[i].first.second<<" "<<res[i].second<<endl;
}else if(value==1)
{
cout<<"1 yuan coin number="<< coinCount["1"]<<endl;
cout<<"2 yuan coin number="<< coinCount["2"]<<endl;
cout<<"5 yuan coin number="<< coinCount["5"]<<endl;
cout<<"10 yuan coin number="<< coinCount["10"]<<endl;
}else cout<<"E010:Parameter error"<<endl;
}else cout<<"E010:Parameter error"<<endl;
}
int main(int argc,char* argv[])
{
string input;
while(getline(cin,input))
{
vector<string>res=spliteString(input,';');
for(int i=0;i<res.size();i++)
{
switch(res[i][0])
{
case 'r':
init(res[i]);
break;
case 'p':
pay(res[i]);
break;
case 'b':
buy(res[i]);
break;
case 'c':
back();
break;
case 'q':
info(res[i]);
break;
}
}
}
return 0;
}