天天看点

Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C 数学

链接:戳这里

C. A Problem about Polyline time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard 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.

Examples

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.

Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C 数学
Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C 数学

题意:

给出a,b 问这个点是否在形如(0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....的折线上

有的话输出最小的x,否则输出-1

思路:

当b>a时为-1

b<=a时均有答案 那么既然x要尽可能的小,那么中间的循环节尽可能的长

当然x>=b这是肯定的   可以得出 2*k*x=(a+b) (0<=k<=1e9) (至于为什么是+b而不是-b  因为这样x会尽可能的小)

所以x=(a+b)/(2*k)  而又x>=b 所以2*k<=(a+b)/b 当2*k为奇数的时候++

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include <ctime>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<iomanip>
#include<cmath>
#define mst(ss,b) memset((ss),(b),sizeof(ss))
#define maxn 0x3f3f3f3f
#define MAX 1000100
///#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef unsigned long long ull;
#define INF (1ll<<60)-1
using namespace std;
double a,b;
const double eps=1e-9;
int main(){
    cin>>a>>b;
    if(b>a) {
        cout<<-1<<endl;
        return 0;
    }
    int t=a/b+1;
    if(t%2==1) t--;
    double ans=(a+b)*1.0/(t*1.0);
    printf("%.12f\n",ans);
    return 0;
}
           

继续阅读