|
@@ -50,19 +50,11 @@ int main() {
|
|
|
}
|
|
|
stack.push_back(p);
|
|
|
}
|
|
|
- double len = 0.;
|
|
|
- Point pre = *(stack.begin());
|
|
|
- vector<Point>::iterator it;
|
|
|
- for (it = ++stack.begin(); it != stack.end(); ++it) {
|
|
|
- len += dist(pre, *it);
|
|
|
- pre = *it;
|
|
|
- }
|
|
|
- stack.clear();
|
|
|
- stack.push_back(point[n - 1]);
|
|
|
+ int size = stack.size();
|
|
|
stack.push_back(point[n - 2]);
|
|
|
for (int i = n - 3; 0 <= i; i--) {
|
|
|
Point& p = point[i];
|
|
|
- while (1 < stack.size()) {
|
|
|
+ while (size < stack.size()) {
|
|
|
Point p1 = *(stack.end() - 1);
|
|
|
Point p2 = *(stack.end() - 2);
|
|
|
if (((p2 - p1) ^ (p - p2)) < 0)
|
|
@@ -72,7 +64,9 @@ int main() {
|
|
|
}
|
|
|
stack.push_back(p);
|
|
|
}
|
|
|
- pre = *(stack.begin());
|
|
|
+ double len = 0.;
|
|
|
+ Point pre = *(stack.begin());
|
|
|
+ vector<Point>::iterator it;
|
|
|
for (it = ++stack.begin(); it != stack.end(); ++it) {
|
|
|
len += dist(pre, *it);
|
|
|
pre = *it;
|