https://www.acmicpc.net/problem/1902


1902번 솔루션 코드 보고 있는데



/*
Izborne pripreme 2004 - Drugi izborni ispit
Zadatak SPILJA
*/

#include <iostream>

using namespace std;

int N;
int x[5000], y[5000];

bool ok( double Y ) {
double l = x[0], r = x[N-1];
for( int i = 1; i < N; ++i ) {
double x1 = x[i-1], x2 = x[i];
double y1 = y[i-1], y2 = y[i];

double X = x1 + (x2-x1) * (Y-y1) / (y2-y1);

if( y1 == y2 && Y < y1 ) return false;
if( y1 > y2 ) l >?= X;
if( y1 < y2 ) r <?= X;
}
return l <= r;
}

int main( void ) {
cin >> N;
for( int i = 0; i < N; ++i ) cin >> x[i] >> y[i];

double lo = 0, hi = 1000000;
while( hi-lo > 0.005 ) {
double mid = (lo+hi)/2;
if( ok( mid ) ) hi = mid; else lo = mid;
}

cout.setf( ostream::fixed );
cout.precision( 2 );
cout << (lo+hi)/2 << endl;

return 0;
}



여기서 20번째 줄

double X = x1 + (x2-x1) * (Y-y1) / (y2-y1);

이게 뭔 좌표를 계산하는 건지 모르겠음 ㅜㅜ