C. A Problem about Polyline
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
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 value x such that it is true or determine that there is no such x.
Input
Only one line containing two positive integers a and b (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 exceed 10 - 9. If there is no such x 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.
#include
#include
#include
#include
#include
#include
using namespace std; int main() { int a,b; while(scanf("%d%d",&a,&b)==2) { int t=a/b+1; ///找最大的正偶数t使得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; }