Cod sursa(job #2066735)

Utilizator werebearsMaicuta Cosmica werebears Data 15 noiembrie 2017 13:40:15
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

#define MaxN 50005
#define MOD 8191
#define INF 2140000000
#define eps 1e-4
using namespace std;

FILE*IN,*OUT;

double a,b,x,y,P,MaxP,R,MaxR=0,nextx;
double Get(double Y)
{
    return a*sqrt(1-Y*Y/b/b);
}
double dist(double x1,double y1,double x2,double y2)
{
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
    IN=fopen("test.in","r");
    OUT=fopen("test.out","w");

    fscanf(IN,"%lf%lf",&a,&b);

    if(b>=a)
    {
        fprintf(OUT,"%lf",a/2);
        return 0;
    }
    y=b;
    x=0;
    nextx=Get(y-eps);
    for(P=0;;P+=eps)
    {
       while(dist(P,0,x,y)>dist(P,0,nextx,y-eps))
       {
           y-=eps;
           x=nextx;
           nextx=Get(y-eps);
       }
       if(P-dist(P,0,x,y)>=eps)
       {
           fprintf(OUT,"%lf\n",P);
           return 0;
       }
    }
    return 0;
}