Submission #13757

#TimeUsernameProblemLanguageResultExecution timeMemory
13757baneling100Wall construction (kriii2_WA)C++98
4 / 4
0 ms1128 KiB
#include <stdio.h> #include <algorithm> #include <math.h> #define N_MAX 1000 #define Pi 3.1415926535897932384626433832795 using namespace std; struct column { int x; int y; bool operator < (column K) const {return x<K.x || (x==K.x && y<K.y);} } A[N_MAX+1]; int N, R, Up[N_MAX+1], Usize, Down[N_MAX+1], Dsize; double Res; int turn(int a, int b, int c) {return (A[a].x*A[b].y+A[b].x*A[c].y+A[c].x*A[a].y)-(A[b].x*A[a].y+A[c].x*A[b].y+A[a].x*A[c].y);} int main(void) { int i; scanf("%d %d",&N,&R); for(i=1 ; i<=N ; i++) scanf("%d %d",&A[i].x,&A[i].y); sort(A+1,A+N+1); Up[++Usize]=1; Up[++Usize]=2; Down[++Dsize]=1; Down[++Dsize]=2; for(i=3 ; i<=N ; i++) { while(Usize>=2 && turn(Up[Usize-1],Up[Usize],i)>=0) Usize--; Up[++Usize]=i; while(Dsize>=2 && turn(Down[Dsize-1],Down[Dsize],i)<=0) Dsize--; Down[++Dsize]=i; } for(i=2 ; i<=Usize ; i++) Res+=sqrt((A[Up[i]].x-A[Up[i-1]].x)*(A[Up[i]].x-A[Up[i-1]].x)+(A[Up[i]].y-A[Up[i-1]].y)*(A[Up[i]].y-A[Up[i-1]].y)); for(i=2 ; i<=Dsize ; i++) Res+=sqrt((A[Down[i]].x-A[Down[i-1]].x)*(A[Down[i]].x-A[Down[i-1]].x)+(A[Down[i]].y-A[Down[i-1]].y)*(A[Down[i]].y-A[Down[i-1]].y)); Res+=2*Pi*R; printf("%.12lf",Res); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...