#include <stdio.h>
#include <math.h>
long check(long, long, long, long, long, long, long);
int eProduct(long, long, long, long, long, long);
int main()
{
long N, s, g, l, r, i, si;
long newS;
double sum = 0.0;
scanf( "%ld", &N );
scanf( "%ld %ld", &s, &g );
scanf( "%ld %ld", &l, &r );
si = 0;
for ( i = 1; si != N; ) {
scanf( "%ld %ld", &l, &r );
// printf( "input: %d %d\n", l, r );
if ( newS = check(si, s, N, g, si+i, l, r) ) {
// printf( "check!(i:%d,num:%d)\n", i, newS );
sum += sqrt((newS-s)*(newS-s)+i*i);
s = newS;
si += i;
i = 1;
}
else {
i++;
}
}
printf( "%.20lf\n", sum );
return 0;
}
long check( long si, long s, long N, long g, long i, long l, long r ) {
if ( i == N ) {
return g;
}
if ( eProduct(s,si,g,N,l,i) ) {
return l;
}
if ( eProduct(s,si,r,i,g,N) ) {
return r;
}
return 0;
}
int eProduct( long ox, long oy, long p1x, long p1y, long p2x, long p2y ) {
long long op1x = p1x-ox, op1y = p1y-oy;
long long op2x = p2x-ox, op2y = p2y-oy;
return op1x*op2y >= op1y*op2x;
}
./Main.c: In function ‘main’:
./Main.c:13: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
./Main.c:14: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
./Main.c:15: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
./Main.c:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result