Kevin_Zhang

Untitled

Aug 14th, 2021 (edited)
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. pair<double,double> operator + (pair<double,double> a, pair<double,double> b) {
  2.     return make_pair(a.first+b.first, a.second+b.second);
  3. }
  4. pair<double,double> operator - (pair<double,double> a, pair<double,double> b) {
  5.     return make_pair(a.first-b.first, a.second-b.second);
  6. }
  7. double operator ^ (pair<double,double> a, pair<double,double> b) {
  8.     return a.first*b.second-a.second*b.first;
  9. }
  10. double ori(pair<double,double> a, pair<double,double> b, pair<double, double> c) {
  11.     return (b-a) ^ (c-a);
  12. }
  13.  
  14. int cnt_conv(vector<pair<double,double>> dot) {
  15.     sort(ALL(dot));
  16.     vector<pair<double,double>> up, dn;
  17.     for (auto [x, y] : dot) {
  18.         while (up.size()>1 && ori(end(up)[-2], end(up)[-1], make_pair(x, y)) >= 0)
  19.             up.pop_back();
  20.         while (dn.size()>1 && ori(end(dn)[-2], end(dn)[-1], make_pair(x, y)) <= 0)
  21.             dn.pop_back();
  22.         up.pb(x, y), dn.pb(x, y);
  23.     }
  24.     return up.size() + dn.size() - 2;
  25. }
  26.  
Add Comment
Please, Sign In to add comment