Submission #604756

#TimeUsernameProblemLanguageResultExecution timeMemory
604756pakhomoveeTriangles (CEOI18_tri)C++17
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <cassert>
#include <cstring>

using namespace std;

/*int get_n();
bool is_clockwise(int a, int b, int c);
void give_answer(int s);*/

bool upper_cmp(int i, int j) {
    return is_clockwise(1, i + 1, j + 1);
}

bool lower_cmp(int i, int j) {
    return is_clockwise(1, i + 1, j + 1);
}

vector<int> hull_upper(vector<int> sorted_points) {
    vector<int> hull;
    for (int i : sorted_points) {
        while (hull.size() > 1 && is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
        hull.push_back(i);
    }
    return hull;
}

vector<int> hull_lower(vector<int> sorted_points) {
    vector<int> hull;
    for (int i : sorted_points) {
        while (hull.size() > 1 && !is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
        hull.push_back(i);
    }
    return hull;
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n = get_n();
    vector<int> upper, lower;
    for (int i = 2; i < n; ++i) {
        if (is_clockwise(1, 2, i + 1)) {
            lower.push_back(i);
        } else {
            upper.push_back(i);
        }
    }
    upper.insert(upper.begin(), 1);
    upper.push_back(0);
    sort(upper.begin() + 1, upper.begin() + upper.size() - 1, upper_cmp);
    lower.insert(lower.begin(), 1);
    lower.push_back(0);
    sort(lower.begin() + 1, lower.begin() + lower.size() - 1, lower_cmp);
    vector<int> upper_hull = hull_upper(upper);
    vector<int> lower_hull = hull_lower(lower);
    if (upper_hull.size() == 2) {
        give_answer(lower_hull.size());
        return 0;
    }
    reverse(lower_hull.begin(), lower_hull.end());
    for (int i : lower_hull) {
        upper_hull.push_back(i);
    }
    vector<int> hull;
    for (int s = 0; s <= upper_hull.size(); ++s) {
        int i = upper_hull[(1 + s) % upper_hull.size()];
        if (!hull.empty() && i == hull.back()) continue;
        while (hull.size() > 1 && is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
        hull.push_back(i);
    }
    give_answer(hull.size() - 1);
    return 0;
}

Compilation message (stderr)

tri.cpp: In function 'bool upper_cmp(int, int)':
tri.cpp:15:12: error: 'is_clockwise' was not declared in this scope
   15 |     return is_clockwise(1, i + 1, j + 1);
      |            ^~~~~~~~~~~~
tri.cpp: In function 'bool lower_cmp(int, int)':
tri.cpp:19:12: error: 'is_clockwise' was not declared in this scope
   19 |     return is_clockwise(1, i + 1, j + 1);
      |            ^~~~~~~~~~~~
tri.cpp: In function 'std::vector<int> hull_upper(std::vector<int>)':
tri.cpp:25:35: error: 'is_clockwise' was not declared in this scope
   25 |         while (hull.size() > 1 && is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
      |                                   ^~~~~~~~~~~~
tri.cpp: In function 'std::vector<int> hull_lower(std::vector<int>)':
tri.cpp:34:36: error: 'is_clockwise' was not declared in this scope
   34 |         while (hull.size() > 1 && !is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
      |                                    ^~~~~~~~~~~~
tri.cpp: In function 'int32_t main()':
tri.cpp:44:13: error: 'get_n' was not declared in this scope
   44 |     int n = get_n();
      |             ^~~~~
tri.cpp:47:13: error: 'is_clockwise' was not declared in this scope
   47 |         if (is_clockwise(1, 2, i + 1)) {
      |             ^~~~~~~~~~~~
tri.cpp:62:9: error: 'give_answer' was not declared in this scope
   62 |         give_answer(lower_hull.size());
      |         ^~~~~~~~~~~
tri.cpp:70:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |     for (int s = 0; s <= upper_hull.size(); ++s) {
      |                     ~~^~~~~~~~~~~~~~~~~~~~
tri.cpp:73:35: error: 'is_clockwise' was not declared in this scope
   73 |         while (hull.size() > 1 && is_clockwise(hull[hull.size() - 2] + 1, hull.back() + 1, i + 1)) hull.pop_back();
      |                                   ^~~~~~~~~~~~
tri.cpp:76:5: error: 'give_answer' was not declared in this scope
   76 |     give_answer(hull.size() - 1);
      |     ^~~~~~~~~~~