fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <vector>
  4. #include <sstream>
  5. using namespace std;
  6.  
  7. unordered_map<string, unordered_map<string, float>> parse_facts(vector<string> &start_unit, vector<float> &multiplier, vector<string> &end_unit){
  8. unordered_map<string, unordered_map<string, float>> h;
  9. int n = multiplier.size();
  10. for(int i=0; i<n; i++){
  11. h[start_unit[i]][end_unit[i]]=multiplier[i];
  12. h[end_unit[i]][start_unit[i]]= 1 / multiplier[i];
  13. }
  14. return h;
  15. }
  16.  
  17. string resolve_query(float x, string start_unit, string end_unit, unordered_map<string, unordered_map<string, float>>& h){
  18. if(h.find(start_unit)==h.end() || h[start_unit].find(end_unit)==h[start_unit].end())
  19. return "not convertible!";
  20. x *= h[start_unit][end_unit];
  21. stringstream ss;
  22. ss<<x<<' '<<end_unit;
  23. return ss.str();
  24. }
  25.  
  26. int main() {
  27. int t;
  28. string a, b;
  29. float c;
  30. cin>>t;
  31. vector<string> start_units, end_units;
  32. vector<float> multipliers;
  33. while(t--){
  34. cin>>a>>c>>b;
  35. start_units.push_back(a);
  36. end_units.push_back(b);
  37. multipliers.push_back(c);
  38. }
  39.  
  40.  
  41. unordered_map<string, unordered_map<string, float>> h = parse_facts(start_units, multipliers, end_units);
  42.  
  43. // 1. input the queries
  44. vector<float> inputs;
  45. start_units.clear();
  46. end_units.clear();
  47. cin>>t;
  48. while(t--){
  49. cin>>c>>a>>b;
  50. cout<<resolve_query(c,a,b,h)<<endl;
  51. }
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5296KB
stdin
4
m 3.28 ft
ft 12 in
hr 60 min
min 60 sec

4
2 m ft
2 m in
13 in m
13 in hr
stdout
6.56 ft
not convertible!
not convertible!
not convertible!