This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "trilib.h"
#include "bits/stdc++.h"
using namespace std;
typedef int ll;
typedef unsigned long long ull;
typedef pair<ll,ll>pairll;
typedef pair<ll,ull>pairull;
typedef pair<ll,pairll>pair3l;
typedef long double ld;
typedef pair<ld,ld>pairld;
typedef pair<string,ll>pairsl;
#define fr first
#define sc second
#define pb push_back
#define endl '\n'
#define N 100007
#define MOD 1000000007
#define INF 10000000000007
#define eps 0.00000000001
#define A 50
#define PI 3.14159265359
ll n,d[40007],mn,mx;
deque<ll>v,a;
vector<ll>h;
map<pair3l,ll>m;
ll cl(ll x,ll y,ll z){
if(m[{x,{y,z}}]==0){
m[{x,{y,z}}]=ll(is_clockwise(x,y,z))+1;
}
return m[{x,{y,z}}]-1;
}
int main(){
n=get_n();
if(n==3){
give_answer(3);
return 0;
}
v.pb(2);
for(int i=3;i<=n;i++){
ll l=0;
ll r=v.size();
while(l<r){
ll m1=(l+r)/2;
if(cl(1,i,v[m1])==1){
r=m1;
}else l=m1+1;
}
for(int j=1;i<=l;j++){
v.pb(v.front());
v.pop_front();
}
v.push_front(i);
}
a.pb(v[0]);
a.pb(v[1]);
ll x=2;
for(int i=2;i<n-1;i++){
while(x>1 && cl(a[x-2],a[x-1],v[i])==0){
x--;
a.pop_back();
}
x++;
a.pb(v[i]);
}
while(x>3 && (cl(a[x-1],a[0],a[1])==0 || cl(a[x-2],a[x-1],a[0])==0)){
if(cl(a[x-1],a[0],a[1])==0){
x--;
a.pop_front();
}else{
x--;
a.pop_back();
}
}
ll y=0;
for(int i=0;i<x;i++){
if(cl(a[i],1,a[(i+1)%x])==1)y++;
}
if(y>0){
give_answer(x-y+2);
}else give_answer(x);
return 0;
}
/*
8
1 1
1 18
4 16
6 14
7 11
6 8
4 4
15 10
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |