Submission #321181

#TimeUsernameProblemLanguageResultExecution timeMemory
321181phathnvTriangles (CEOI18_tri)C++11
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "trilib.c"

#define mp make_pair
#define X first
#define Y second
#define taskname "Triangle"

using namespace std;

typedef long long ll;
typedef pair <int, int> point;

const int N = 40001;
int _n, ind[N];

int main(){
    _n = get_n();
    int tmp = 2;
    for(int i = 3; i <= n; i++)
        if (is_clockwise(1, tmp, i))
            tmp = i;
    bool flag = 0;
    for(int i = 2; i <= n; i++){
        if (tmp == i)
            continue;
        if (is_clockwise(1, tmp, i)){
            flag = 1;
            break;
        }
    }
    if (flag == 0){ /// 1 in convex hull
        for(int i = 1; i <= _n; i++)
            ind[i] = i;
        sort(ind + 2, ind + 1 + _n, [](const int &a, const int &b){
                return (!is_clockwise(1, a, b));
             });
        vector <int> st;
        st.push_back(1);
        for(int i = 2; i <= n; i++){
            while (st.size() >= 2){
                if (is_clockwise(st[st.size() - 2], st[st.size() - 1], ind[i]))
                    st.pop_back();
                else
                    break;
            }
            st.push_back(ind[i]);
        }
        cout << st.size();
    } else {
        for(int i = 1; i <= _n; i++)
            ind[i] = i;
        sort(ind + 3, ind + 1 + _n, [](const int &a, const int &b){
                bool tA = is_clockwise(1, 2, a);
                bool tB = is_clockwise(1, 2, b);
                if (tA != tB)
                    return tB;
                return (!is_clockwise(1, a, b));
             });
        vector <int> st;
        st.push_back(2);
        for(int i = 3; i <= n; i++){
            while (st.size() >= 2){
                if (is_clockwise(st[st.size() - 2], st[st.size() - 1], ind[i]))
                    st.pop_back();
                else
                    break;
            }
            st.push_back(ind[i]);
        }
        int l = 0, r = st.size() - 1;
        while (r - l + 1 > 3){
            if (is_clockwise(st[r], st[l], st[l + 1])){
                l++;
                continue;
            }
            if (is_clockwise(st[r - 1], st[r], st[l])){
                r--;
                continue;
            }
            break;
        }
        cout << r - l + 1;
    }

    return 0;
}


/*
6
2 2
4 3
1 1
1 4
5 1
3 2
*/

Compilation message (stderr)

/tmp/ccnj9KCR.o: In function `get_n':
tri.cpp:(.text+0x110): multiple definition of `get_n'
/tmp/ccGnDk1V.o:trilib.c:(.text+0x110): first defined here
/tmp/ccnj9KCR.o: In function `is_clockwise':
tri.cpp:(.text+0x130): multiple definition of `is_clockwise'
/tmp/ccGnDk1V.o:trilib.c:(.text+0x130): first defined here
/tmp/ccnj9KCR.o: In function `give_answer':
tri.cpp:(.text+0xee0): multiple definition of `give_answer'
/tmp/ccGnDk1V.o:trilib.c:(.text+0x290): first defined here
collect2: error: ld returned 1 exit status