Codeforces Round #320 (Div. 2) C - A Problem about Polyline
2015-09-17 13:20
363 查看
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 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
Output
Input
Output
Input
Output
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为奇数是减一,为偶数时不变
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 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.
刚开始一看题目,感觉很难,其实仔细想想并不是很难
根据点在直线上,可以得到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; }
相关文章推荐
- Codeforces Round #320 (Div. 2) C - A Problem about Polyline
- 二叉树的深度优先,广度优先,以及层次遍历算法
- leetcode笔记:Linked List Cycle
- 分享10条PHP性能优化的小技巧,帮助你更好的用PHP开发:
- java关键字说明
- M—V—C模式
- oracle11g登录的问题
- iOS激情详解之URL同步,异步连接
- 用ListView实现GridView
- sauvola算法实现
- java execute、executeQuery和executeUpdate之间的区别
- ASP.NET动态网站制作(1)--html
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D "Or" Game 枚举+前缀后缀
- L7 linux shell编程练习
- java中的抽象类和接口详解
- 后台任务的抉择
- Week3---9月22日 图像与多媒体
- UVa 11584:Partitioning by Palindromes(DP)
- 不均匀光照文本图像的二值化
- XCODE的演变及使用经验分享