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번째 줄
이게 뭔 좌표를 계산하는 건지 모르겠음 ㅜㅜ
(x1, y1)인 점이 있고 (x2, y2)인 점이 있으면 그 두 점을 지나는 직선이 있을 텐데 그 직선에서 y좌표가 Y인 점이 (X, Y)라 하면 X를 구하는 거임
개추개추