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<bits/stdc++.h>
#include "trilib.h"
using namespace std;
//static int n;
//static long long *x, *y;
//static int queries=0;
//static void init() {
// static int is_inited=0;
// if (is_inited)
// return;
// is_inited=1;
// assert(scanf("%d", &n)==1);
// x=(long long*)malloc((n+1)*sizeof(long long));
// y=(long long*)malloc((n+1)*sizeof(long long));
// for (int i=1; i<=n; i++)
// assert(scanf("%lld%lld", &x[i], &y[i])==2);
//}
//
//int get_n() {
//// init();
// return n;
//}
//
//int is_clockwise(int a, int b, int c) {
// init();
// assert(a>=1 && a<=n);
// assert(b>=1 && b<=n);
// assert(c>=1 && c<=n);
// assert(a!=b && a!=c && b!=c);
// queries++;
// if(queries == 1000 * 1000 + 1)
// printf("Too many queries!");
// return (x[b]-x[a])*(y[c]-y[a])-(x[c]-x[a])*(y[b]-y[a])<0;
//}
//
//void give_answer(int s) {
//// init();
// printf("%d\n", s);
//}
const int maxn = 4e4 + 5;
int n , id[maxn];
int a[maxn];
int main(){
srand(time(0));
// init();
n = get_n();
int u = rand() % n + 1;
for(int i = 1 ; i <= n ; ++i){
id[i] = i;
}
swap(id[u] , id[1]);
sort(id + 2 , id + n + 1 , [&](const int & x , const int &y){
return !is_clockwise(u , x , y);
});
int m = 0;
for(int i = 1 ; i <= n ; ++i){
while(m >= 2 && is_clockwise(a[m - 1] , a[m] , id[i]))--m;
a[++m] = id[i];
}
// give_answer(m);
int pre = m;
u = a[rand() % m + 1];
for(int i = 1 ; i <= n ; ++i){
id[i] = i;
}
swap(id[u] , id[1]);
sort(id + 2 , id + n + 1 , [&](const int & x , const int &y){
return !is_clockwise(u , x , y);
});
m = 0;
for(int i = 1 ; i <= n ; ++i){
while(m >= 2 && is_clockwise(a[m - 1] , a[m] , id[i]))--m;
a[++m] = id[i];
}
while(m != pre){
pre = m;
u = a[rand() % m + 1];
for(int i = 1 ; i <= n ; ++i){
id[i] = i;
}
swap(id[u] , id[1]);
sort(id + 2 , id + n + 1 , [&](const int & x , const int &y){
return !is_clockwise(u , x , y);
});
m = 0;
for(int i = 1 ; i <= n ; ++i){
while(m >= 2 && is_clockwise(a[m - 1] , a[m] , id[i]))--m;
a[++m] = id[i];
}
}
give_answer(m);
}
# | 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... |