답안 #300881

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
300881 2020-09-17T14:46:43 Z Mohammad_Yasser 시간이 돈 (balkan11_timeismoney) C++14
컴파일 오류
0 ms 0 KB
#ifndef Local
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse4,sse4.2,popcnt,abm,mmx,avx")
#endif
#include <bits/stdc++.h>

using namespace std;

#define popCnt(x) (__builtin_popcountll(x))
#define sz(x) ((int)(x.size()))
#define all(v) begin(v), end(v)
#define rall(v) rbegin(v), rend(v)
typedef long long Long;
typedef double Double;

template <class U, class V>
istream& operator>>(istream& is, pair<U, V>& p) {
  is >> p.first >> p.second;
  return is;
}
template <class T>
istream& operator>>(istream& is, vector<T>& v) {
  for (auto& x : v) {
    is >> x;
  }
  return is;
}

template <class T>
ostream& operator<<(ostream& os, vector<T>& v) {
  for (auto& x : v) {
    os << x << " ";
  }
  return os;
}

const Double EPS = 1e-10;

enum Relation { LESS_THAN, EQUAL, GREATER_THAN };

bool areEqual(Double x, Double y, Double eps = EPS) {
  auto diff = abs(x - y);
  x = abs(x), y = abs(y);
  if (diff <= eps) return true;
  if (min(x, y) <= eps) return false;
  return diff <= eps * max(x, y);
}

bool isZero(Double x, Double eps = EPS) { return abs(x) <= eps; }
bool isZero(Long x) { return x == 0; }

int compareDoubles(Double x, Double y, Double eps = EPS) {
  if (areEqual(x, y, eps)) return Relation::EQUAL;
  if (x < y) return Relation::LESS_THAN;
  return Relation::GREATER_THAN;
}

template <typename T = Double>
struct Point {
  typedef Point P;
  const static P Invalid;
  const static P Origin;

  T x = 0, y = 0;
  Point(T x, T y) : x(x), y(y) {}
  Point() {}
  pair<T, T> to_pair() const { return make_pair(x, y); }
  Point operator+(const Point& p) const { return Point{x + p.x, y + p.y}; }
  Point operator-(const Point& p) const { return Point{x - p.x, y - p.y}; }
  Point operator*(T c) const { return Point(x * c, y * c); }
  Point operator/(T c) const { return Point(x / c, y / c); }
  bool operator<(const Point& p) const {
    return (*this) != p && to_pair() < p.to_pair();
  }
  bool operator>(const Point& p) const { return (*this) != p && !(*this < p); }
  bool operator==(const Point& p) const {
    return isZero(this->x - p.x) && isZero(this->y - p.y);
  }
  bool operator!=(const Point& p) const { return !(*this == p); }
  T cross(const P& p) const { return x * p.y - y * p.x; }
  T cross(const P& a, const P& b) const { return (a - *this).cross(b - *this); }
  T dot(const P& p) const { return x * p.x + y * p.y; }
  P midPoint(const P& p) const { return ((*this) + p) / 2; }
  P getVector(const P& p) const { return p - (*this); }
  T dist2(const P& p) const { return getVector(p).dist2(); }
  T dist2() const { return (*this).dot(*this); }
  Double dist(const P& p) const { return sqrt(dist2(p)); }
  Double dist() const { return sqrt(dist2()); }
  P rotateCCW90() const { return P(-y, x); }
  friend istream& operator>>(istream& is, P& p) { return is >> p.x >> p.y; }

  friend ostream& operator<<(ostream& os, const P& p) {
    return os << p.x << " " << p.y;
  }
};

template <typename T>
const Point<T> Point<T>::Invalid = Point<T>(numeric_limits<T>::max(),
                                            numeric_limits<T>::max());
template <typename T>
const Point<T> Point<T>::Origin = Point<T>(0, 0);

typedef Point<Double> P;

bool areCollinear(const P& a, const P& b, const P& c) {
  return isZero(a.getVector(b).cross(c.getVector(b)));
}

const int N = 200;

struct DSU {
  int parent[N];
  void init() {
    for (int i = 0; i < N; ++i) {
      parent[i] = i;
    }
  }
  int getRoot(int x) {
    if (parent[x] == x) return x;
    return parent[x] = getRoot(parent[x]);
  }
  bool join(int x, int y) {
    x = getRoot(x);
    y = getRoot(y);
    if (x == y) return false;
    parent[x] = y;
    return true;
  }
};

struct Edge {
  int u, v;
  Double t, c;
  bool operator<(const Edge& other) const { return t + c < other.t + other.c; }
};

vector<Edge> edges;

struct Solution {
  uint t = 0, c = 0;
  vector<pair<int, int>> edges;
  P getP() const { return P(t, c); }
  uint score() const { return t * c; }
  bool operator<(const Solution& other) const {
    return score() < other.score();
  }
  bool operator==(const Solution& other) const {
    return t == other.t && c == other.c;
  }
};

Solution mst(const P& coeff) {
  auto edges = ::edges;
  for (auto& edge : edges) {
    edge.t *= coeff.x;
    edge.c *= coeff.y;
  }
  sort(all(edges));
  static DSU dsu;
  dsu.init();
  Solution sol;
  for (auto& edge : edges) {
    if (dsu.join(edge.u, edge.v)) {
      sol.t += round(edge.t / coeff.x), sol.c += round(edge.c / coeff.y);
      sol.edges.emplace_back(edge.u, edge.v);
    }
  }
  return sol;
}
Solution best;
void solve(const P& left_v, const P& right_v, const Solution& left_sol,
           const Solution& right_sol) {
  P mid = (left_sol.getP() - right_sol.getP()).rotateCCW90();

  auto sol = mst(mid);
  best = min(best, sol);
  if (areCollinear(left_sol.getP(), sol.getP(), right_sol.getP())) return;
  solve(left_v, mid, left_sol, sol);
  solve(mid, right_v, sol, right_sol);
}

int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#ifdef Local
  freopen("test.in", "r", stdin);
#else
#define endl '\n'
#endif

  P a(1, 1), b(1, 1), c(2, 2);
  cout << areCollinear(a, b, c) << endl;
  return 0;

  int n, m;
  cin >> n >> m;

  edges.resize(m);
  for (auto& edge : edges) {
    cin >> edge.u >> edge.v >> edge.t >> edge.c;
  }

  P left_v(1e-7, 1);
  P right_v(1, 1e-7);
  auto left_sol = mst(left_v);
  auto right_sol = mst(right_v);
  best = min(left_sol, right_sol);
  if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
  cout << best.t << " " << best.c << endl;
  for (auto [u, v] : best.edges) {
    cout << u << " " << v << endl;
  }

  return 0;
}

Compilation message

timeismoney.cpp: In function 'int main()':
timeismoney.cpp:207:16: error: no match for 'operator!=' (operand types are 'Solution' and 'Solution')
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |       ~~~~~~~~ ^~ ~~~~~~~~~
      |       |           |
      |       Solution    Solution
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1037:5: note: candidate: 'template<class _BiIter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const std::__cxx11::sub_match<_BiIter>&)'
 1037 |     operator!=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1037:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1112:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator!=(std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&, const std::__cxx11::sub_match<_BiIter>&)'
 1112 |     operator!=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1112:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1186:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&)'
 1186 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1186:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1260:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const typename std::iterator_traits<_Iter>::value_type*, const std::__cxx11::sub_match<_BiIter>&)'
 1260 |     operator!=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1260:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1334:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type*)'
 1334 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1334:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1408:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const typename std::iterator_traits<_Iter>::value_type&, const std::__cxx11::sub_match<_BiIter>&)'
 1408 |     operator!=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1408:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:1486:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator!=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type&)'
 1486 |     operator!=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:1486:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:110,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/regex.h:2015:5: note: candidate: 'template<class _Bi_iter, class _Alloc> bool std::__cxx11::operator!=(const std::__cxx11::match_results<_BiIter, _Alloc>&, const std::__cxx11::match_results<_BiIter, _Alloc>&)'
 2015 |     operator!=(const match_results<_Bi_iter, _Alloc>& __m1,
      |     ^~~~~~~~
/usr/include/c++/9/bits/regex.h:2015:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::match_results<_BiIter, _Alloc>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/iosfwd:40,
                 from /usr/include/c++/9/ios:38,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/postypes.h:227:5: note: candidate: 'template<class _StateT> bool std::operator!=(const std::fpos<_StateT>&, const std::fpos<_StateT>&)'
  227 |     operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/9/bits/postypes.h:227:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::fpos<_StateT>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:64,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/stl_pair.h:461:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator!=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)'
  461 |     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/9/bits/stl_pair.h:461:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::pair<_T1, _T2>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:67,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/stl_iterator.h:337:5: note: candidate: 'template<class _Iterator> bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)'
  337 |     operator!=(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:337:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::reverse_iterator<_Iterator>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:67,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/stl_iterator.h:375:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)'
  375 |     operator!=(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:375:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::reverse_iterator<_Iterator>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:67,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/stl_iterator.h:1151:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator!=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)'
 1151 |     operator!=(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:1151:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::move_iterator<_IteratorL>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:67,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/stl_iterator.h:1157:5: note: candidate: 'template<class _Iterator> bool std::operator!=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)'
 1157 |     operator!=(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/9/bits/stl_iterator.h:1157:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::move_iterator<_IteratorL>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/string:41,
                 from /usr/include/c++/9/bits/locale_classes.h:40,
                 from /usr/include/c++/9/bits/ios_base.h:41,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/allocator.h:174:5: note: candidate: 'template<class _T1, class _T2> bool std::operator!=(const std::allocator<_CharT>&, const std::allocator<_T2>&)'
  174 |     operator!=(const allocator<_T1>&, const allocator<_T2>&)
      |     ^~~~~~~~
/usr/include/c++/9/bits/allocator.h:174:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::allocator<_CharT>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/bits/locale_classes.h:40,
                 from /usr/include/c++/9/bits/ios_base.h:41,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/basic_string.h:6188:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6188 |     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/basic_string.h:6188:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/bits/locale_classes.h:40,
                 from /usr/include/c++/9/bits/ios_base.h:41,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/basic_string.h:6201:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6201 |     operator!=(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/basic_string.h:6201:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   mismatched types 'const _CharT*' and 'Solution'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/bits/locale_classes.h:40,
                 from /usr/include/c++/9/bits/ios_base.h:41,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/bits/basic_string.h:6213:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator!=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)'
 6213 |     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/9/bits/basic_string.h:6213:5: note:   template argument deduction/substitution failed:
timeismoney.cpp:207:19: note:   'Solution' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>'
  207 |   if (left_sol != right_sol) solve(left_v, right_v, left_sol, right_sol);
      |                   ^~~~~~~~~
In file included from /usr/include/c++/9/bits/ios_base.h:46,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from timeismoney.cpp:5:
/usr/include/c++/9/system_error:319:3: note: candidate: 'bool std::operator!=(const std::error_code&, const std::error_code&)'
  319 |   operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
      |   ^~~~~~~~
/usr/include/c++/9/system_error:319:32: note:   no known conversion for argument 1 from 'Solution' to 'const std::error_code&'
  319 |   operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
      |              ~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/9/system_error:323:3: note: candidate: 'boo