Submission #229803

#TimeUsernameProblemLanguageResultExecution timeMemory
229803Ruxandra985Triangles (CEOI18_tri)C++14
0 / 100
5 ms512 KiB
#include <bits/stdc++.h>
#include "trilib.h"
using namespace std;
 
int v[40010] , x[40010] , y[40010] , s[40010];
 
int cmp (int x , int y){
 
    return !is_clockwise(1 , x , y);
 
}
int main()
{
    int n , i , elem , j , bgn;
    n = get_n();
 
    /// stergi citirea, folosesti get_n
 
    for (i = 2 ; i < n ; i++){
 
        if (is_clockwise(n , i , 1))
            y[++y[0]] = i;
        else x[++x[0]] = i;
 
    }
 
    sort (x + 1 , x + x[0] + 1 , cmp);
    sort (y + 1 , y + y[0] + 1 , cmp);
 
    for (i = 1 ; i <= y[0] ; i++)
        v[i] = y[i];
    v[y[0] + 1] = 1;
    for (i = 1 ; i <= x[0] ; i++)
        v[y[0] + 1 + i] = x[i];
    v[x[0] + y[0] + 2] = n;
 
    s[1] = v[1];
    s[2] = v[2];
    bgn = 1;
    elem = 2;
    for (j = 2 ; j <= n ; j++){
        while (elem - bgn + 1 >= 2 && is_clockwise (s[elem - 1] , s[elem] , v[j])){
            elem--;
        }
        s[++elem] = v[j];
    }
 
    while (elem - bgn + 1 >= 3){
 
        if (is_clockwise (s[elem] , s[bgn] , s[bgn + 1])){
            bgn++;
        }
        else if (is_clockwise (s[elem - 1] , s[elem] , s[bgn]))
            elem--;
        else break;
 
 
    }
 
	give_answer(max(3 , elem - bgn + 1) );
 
 
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...