Codeforces Round #320 (Div. 2) C - A Problem about Polyline

来源:互联网 发布:网络蚂蚁软件 编辑:程序博客网 时间:2024/04/19 21:19
C. A Problem about Polyline
time limit per test
1 second
memory limit per test
256 megabytes

There is a polyline going through points (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....

We know that the polyline passes through the point (a, b). Find minimum positive valuex such that it is true or determine that there is no suchx.

Input

Only one line containing two positive integers a andb (1 ≤ a, b ≤ 109).

Output

Output the only line containing the answer. Your answer will be considered correct if its relative or absolute error doesn't exceed10 - 9. If there is no suchx then output  - 1 as the answer.

Sample test(s)
Input
3 1
Output
1.000000000000
Input
1 3
Output
-1
Input
4 1
Output
1.250000000000
Note

You can see following graphs for sample 1 and sample 3.



刚开始一看题目,感觉很难,其实仔细想想并不是很难
根据点在直线上,可以得到x=(a+b)/2*k
又因为x<=b,
所以解得2*k<=(a+b)/b;
当22*k为奇数是减一,为偶数时不变
#include<iostream>#include<cstdio>#include<cstring>#include <algorithm>#include<queue>#include<cmath>using namespace std;int main(){    int a,b;    while(scanf("%d%d",&a,&b)==2)    {        int t=a/b+1;        if(t<=1) printf("-1\n");        else        {            if(t%2==1) t--;            double ans=(double)(a+b)/(double)t;            printf("%.12lf\n",ans);        }    }    return 0;}


0 0