#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <map>
#include <string>
using namespace std;
#define MAX 100000
string category_name[MAX];
long long pst[MAX], gst[MAX], hst[MAX];
map<string, int> id;
inline long long getCents(long long tax) {
return tax / 10000 + (tax % 10000 >= 5000 ? 1 : 0);
}
// include <algorithm> and <string>
void removeCharFromString(string & str, char ch) {
str.erase(std::remove(str.begin(), str.end(), ch), str.end());
}
void removeDot(string & str) {
removeCharFromString(str, '%');
removeCharFromString(str, '$');
int pos = str.find('.');
if (pos == string::npos || pos == str.length() - 1)
str = str + "00";
else if (pos == str.length() - 2)
str = str + "0";
removeCharFromString(str, '.');
}
int main() {
int cases;
for (cin >> cases; cases; cases--) {
int categories, purchases;
string category_name;
id.clear();
cin >> categories >> purchases;
for (int i = 0; i < categories; i++) {
string pst_s, gst_s, hst_s;
cin >> category_name >> pst_s >> gst_s >> hst_s;
removeDot(pst_s);
removeDot(gst_s);
removeDot(hst_s);
pst[i] = strtoll(pst_s.c_str(), NULL, 10);
gst[i] = strtoll(gst_s.c_str(), NULL, 10);
hst[i] = strtoll(hst_s.c_str(), NULL, 10);
id[category_name] = i;
}
long long total_hst = 0, total_pg = 0;
for (int i = 0; i < purchases; i++) {
string price;
cin >> category_name >> price;
removeDot(price);
long long cents = strtol(price.c_str(), NULL, 10);
int category_id = id[category_name];
total_hst += getCents(hst[category_id] * cents);
total_pg += getCents(pst[category_id] * cents) + getCents(gst[category_id] * cents);
}
double sol = (total_hst - total_pg) / 100.0;
cout << setprecision(2) << fixed << sol << endl;
}
return 0;
}
Thursday, April 23, 2015
UVa 11816 - HST
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment