Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pair<double,double> operator + (pair<double,double> a, pair<double,double> b) {
- return make_pair(a.first+b.first, a.second+b.second);
- }
- pair<double,double> operator - (pair<double,double> a, pair<double,double> b) {
- return make_pair(a.first-b.first, a.second-b.second);
- }
- double operator ^ (pair<double,double> a, pair<double,double> b) {
- return a.first*b.second-a.second*b.first;
- }
- double ori(pair<double,double> a, pair<double,double> b, pair<double, double> c) {
- return (b-a) ^ (c-a);
- }
- int cnt_conv(vector<pair<double,double>> dot) {
- sort(ALL(dot));
- vector<pair<double,double>> up, dn;
- for (auto [x, y] : dot) {
- while (up.size()>1 && ori(end(up)[-2], end(up)[-1], make_pair(x, y)) >= 0)
- up.pop_back();
- while (dn.size()>1 && ori(end(dn)[-2], end(dn)[-1], make_pair(x, y)) <= 0)
- dn.pop_back();
- up.pb(x, y), dn.pb(x, y);
- }
- return up.size() + dn.size() - 2;
- }
Add Comment
Please, Sign In to add comment