题意:

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.

思路:先大概确定范围,再二分。

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define INF 0x7fffffff int main(){
int a,b,x,y;
double ans = INF;
while(scanf("%d%d",&x,&y) == 2){
if(y > x){
printf("-1\n");
continue;
}
else if(y == 0){
printf("0.000000000001\n");
continue;
}
b = x+y;
int k = 1;
int t ;
ans = INF ;
for(; ;){
t = k;
k *= 2;
if(b*1.0/k >= y)
ans = ans < b*1.0/k ? ans : b*1.0/k ;
else
break;
}
while(t<k){
int mid = (t+k)/2;
if(mid%2 == 1)
break;
if(b*1.0/mid >= y)
t = mid ;
else
k = mid ;
}
if(t == 1)
t = 2;
if(k == 1)
k = 2;
double s1 = b*1.0/k;
double s2 = b*1.0/t;
if(s1 >= y && s2 >= y)
ans = s1 > s2 ? s2 : s1 ;
else if(s1 >= y)
ans = s1;
else
ans = s2; b = y -x ;
if(b<0)
b = -b;
if(b == 0){
printf("%.12lf\n",(double)y);
continue;
}
k = 1;
for(; ;){
t = k;
k *= 2;
if(b*1.0/k >= y)
ans = ans < b*1.0/k ? ans : b*1.0/k ;
else
break;
}
while(t<k){
int mid = (t+k)/2;
if(mid%2 == 1)
break;
if(b*1.0/mid >= y)
t = mid ;
else
k = mid ;
}
if(t == 1)
t = 2;
if(k == 1)
k = 2;
s1 = b*1.0/k;
s2 = b*1.0/t;
if(s1 >= y && s2 >= y){
double temp = s1 > s2 ? s2 : s1 ;
ans = temp;
}
else if(s1 >= y)
ans = ans > s1 ? s1 : ans;
else if(s2 >= y)
ans = ans > s2 ? s2 : ans;
printf("%.12lf\n",ans);
} return 0;
}

CF 578A A Problem about Polyline的更多相关文章

  1. codeforces 578a//A Problem about Polyline// Codeforces Round #320 (Div. 1)

    题意:一个等腰直角三角形一样的周期函数(只有x+轴),经过给定的点(a,b),并且半周期为X,使X尽量大,问X最大为多少? 如果a=b,结果就为b 如果a<b无解. 否则,b/(2*k*x-a) ...

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

                                                                           C. A Problem about Polyline   ...

  3. 【26.09%】【codeforces 579C】A Problem about Polyline

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. cf C. Tourist Problem

    http://codeforces.com/contest/340/problem/C #include <cstdio> #include <cstring> #includ ...

  5. CF 291E. Tree-String Problem [dfs kmp trie图优化]

    CF291E 题意:一棵树,每条边上有一些字符,求目标串出现了多少次 直接求目标串的fail然后一边dfs一边跑kmp 然后就被特殊数据卡到\(O(n^2)\)了... 因为这样kmp复杂度分析的基础 ...

  6. CF 1096D Easy Problem [动态规划]

    题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 有一长度为n的字符串,每一字符都有一个权值,要求现在从中取出若干个字符,使得字符串中没 ...

  7. codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)

    解题思路:就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int ...

  8. CF 33B String Problem

    对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小.res[i][j]表示将字母i+'a'和字母j+'a'变为相同的代价,设最终都变成字母k+'a',那么res ...

  9. 【CF contest/792/problem/E】

    E. Colored Balls time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

随机推荐

  1. Dynamic Binding & Static Binding

    Reference: JavaPoint BeginnerBook What is Binding Connecting a method call to the method body is kno ...

  2. 探讨socket引发SIGPIPE信号的问题

    我写socket相关的程序也不是一天两天了,在我的记忆中,只要处理好recv(或read)的返回值中<0,==0,>0三种情况,程序便不会有什么问题.但最近在看公司的源代码时,发现代码中直 ...

  3. python使用一个集合代替列表

    """说明:对于一个指定的序列,如果需要获得一个只包含该序列中不重复的序列时,使用以下算法:"""seq=['a','a','b','c', ...

  4. (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...

  5. 【css3+JavaScript】:一个优雅的对话框

    实现效果: 演示地址:http://codepen.io/anon/pen/BNjYrR ======2015/5/11====== 优化滚动条(scroll):默认的滚动条太丑,忍不住优化下 ::- ...

  6. 关于DevExpress的gridControl的简单使用

    数据绑定 首先生成table,然后更改列名,最后添加一个选择列,类型为"System.Boolean",这样在绑定上gridcontrol的时候会出现一列选择框 table.Col ...

  7. Qt使用QGraphicsView实现滑动窗体效果

    QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容.QGraphicsScene提供了QGraphicsItem的容器功能.通常与QGraphicsView一起使用来描 ...

  8. Java 编程下使用 Class.forName() 加载类

    在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类.下面的范例让你可以指定类名称来获得类的相关信息. ...

  9. Android怎么让一个service开机自动启动

    1.首先开机启动后系统会发出一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED,这个Action只会发出一次. 2. ...

  10. storm启动流程

    email:chenguibin2004@126.com storm: 是一个分布式的实时流式计算框架,具有低延迟.高可用.分布式.可扩展.数据不丢失的特点, storm包含四个核心组件: Nimbu ...