// Задача 2. Территория // Новосибирск, 2015 год // ввод координат многоугольника с крайней левой // против часовой var n,p,q,i,j,bg,nd: integer; a,c: array[1..100,1..2] of real; // массив координат многоугольника d: array[1..3,1..2] of real; // массив вершин треугольника sd: array[1..100,1..4] of real; // массив сторон sm,sq,mx,mn,lf,rt,x1,y1,x2,y2,midl: real; // площадь треугольника по трем координатам function strg: real; begin strg:=abs((d[2][1]-d[1][1])*(d[3][2]-d[1][2]) - (d[3][1]-d[1][1])*(d[2][2]-d[1][2]))/2; end; // площадь многоугольника function smn(var n: integer): real; var i,j: integer; s: real; begin d[1][1]:=a[1][1]; d[1][2]:=a[1][2]; s:=0; for i:=2 to n-1 do begin for j:=2 to 3 do begin d[j][1]:=a[i+j-2][1]; d[j][2]:=a[i+j-2][2]; end; s:=s+strg; end; smn:=s; end; // нахождение двух точек пересечения прямой // и сторон многоугольника, стороны в массиве sd procedure inters; var i: integer; priz: boolean; begin priz:=true; for i:=1 to n do begin if ((sd[i][1]<=midl) and (sd[i][3]>=midl)) or ((sd[i][1]>=midl) and (sd[i][3]<=midl)) then begin if priz then begin bg:=i+1; x1:=midl; y1:=(sd[i][4]-sd[i][2])*(midl-sd[i][1])/(sd[i][3]-sd[i][1])+sd[i][2]; priz:=false; end else begin nd:=i; x2:=midl; y2:=(sd[i][4]-sd[i][2])*(midl-sd[i][1])/(sd[i][3]-sd[i][1])+sd[i][2]; end; end; end; end; // сдвиг массива, если первая вершина // не самая левая procedure shf(var m: integer); var i: integer; begin for i:=1 to m-1 do begin c[i][1]:=a[i][1]; c[i][2]:=a[i][2]; end; for i:=1 to n-m+1 do begin a[i][1]:=a[i+m-1][1]; a[i][2]:=a[i+m-1][2]; end; for i:=1 to m-1 do begin a[n-m+i+1][1]:=c[i][1]; a[n-m+i+1][2]:=c[i][2]; end; end; // основная программа begin // считывание данных readln(n,p,q); mx:=0; mn:=500; for i:=1 to n do begin readln(a[i][1],a[i][2]); if a[i][1]>mx then mx:=a[i][1]; if a[i][1]1 then shf(bg); // перезапись в массив c for i:=1 to n do begin c[i][1]:=a[i][1]; c[i][2]:=a[i][2]; end; // формирование массива сторон sd for i:=1 to n do begin j:=i mod n; sd[i][1]:=a[i][1]; sd[i][2]:=a[i][2]; sd[i][3]:=a[j+1][1]; sd[i][4]:=a[j+1][2]; end; // вычисление площади многоугольника sm:=smn(n); // вычисление площади правого многоугольника Q sq:=(sm*q)/(p+q); // задание границ поиска lf:=mn; rt:=mx; // цикл по интервалу repeat midl:=(lf+rt)/2; inters; a[1][1]:=x1; a[1][2]:=y1; for i:=bg to nd do begin a[i-bg+2][1]:=c[i][1]; a[i-bg+2][2]:=c[i][2]; end; nd:=nd+1; a[nd-bg+2][1]:=x2; a[nd-bg+2][2]:=y2; nd:=nd-bg+2; // площадь нового многоугольника sm:=smn(nd); if sm>sq then lf:=midl else rt:=midl; until (rt-lf)<1.0e-4; writeln(rt:5:3); end.