Codeforces 579C A Problem about Polyline【数学啊】【好不擅长啊】
来源:互联网 发布:npm package.json 编辑:程序博客网 时间:2024/05/03 23:28
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.
Only one line containing two positive integers a andb (1 ≤ a, b ≤ 109).
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.
3 1
1.000000000000
1 3
-1
4 1
1.250000000000
You can see following graphs for sample 1 and sample 3.
题目大意:
有一系列周期性折线:(0,0)->(X,X)->(2X,0)->(3X,X)..................
让你寻找一个合法的X,使得X尽可能的小,并且穿过点(A,B);
思路(来源于网络):
首先我们分析,这个点要么在:y=x-2*k1*X上,要么在:y=-x+2*k2*X上
通过分析:
①X=(x-y)/2k1;
②X=(x+y)/2k2;
③2k1=(x-y)/X;
④2k2=(x+y)/X;
很明显,其中(x+y)和(x-y)是固定不变的,那么我们想要X尽可能的小,那么显然需要2k1和2k2尽可能的大,然而需要2k1和2k2尽可能的大,我们又需要X尽可能的小,通过分析我们不难得出结论:X>=y,那么我们可以通过一个设定X=y,带入求得k1,以及k2我们还知道k1和k2是整数,那么对应我们向下取整的去求k1和k2
然后再带回①和②中秋两个X,取最小即为答案。
Ac代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>using namespace std;int main(){ double x,y; while(~scanf("%lf%lf",&x,&y)) { if(x<y) { printf("-1\n"); } else if(x==y) { printf("%.9lf\n",x); } else { double k1=floor((x-y)/2/y); double k2=floor((x+y)/2/y); printf("%.9lf\n",min((x-y)/k1/2,(x+y)/k2/2)); } }}
- Codeforces 579C A Problem about Polyline【数学啊】【好不擅长啊】
- [CodeForces 579C]A Problem about Polyline[数学]
- CodeForces 579C A Problem about Polyline[数学]
- codeforces 320c A Problem about Polyline(数学)
- Codeforces Round #320 (Div. 2) 579C A Problem about Polyline(数学)
- 【26.09%】【codeforces 579C】A Problem about Polyline
- Codeforces Round #320 (Div. 2)C. A Problem about Polyline
- Codeforces Round #320 (Div. 2) C. A Problem about Polyline
- Codeforces Round #320 (Div. 2) C - A Problem about Polyline
- Codeforces Round #320 (Div. 2) C - A Problem about Polyline
- Codeforces Round #320 (Div. 2) C. A Problem about Polyline
- Codeforces 579 C. A Problem about Polyline(Codeforces Round #320 (Div. 2) )
- A Problem about Polyline
- Codeforces Round #320 (Div. 1) A. A Problem about Polyline
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C. A Problem about Polyline 精度控制
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C. A Problem about Polyline
- cf#320 Div.2 Problem C A Problem about Polyline
- cf#320 Div.2 Problem C A Problem about Polyline
- 用OpenInventor实现的NeHe OpenGL教程-第二课
- struts2的使用注意事项
- 基于ZooKeeper的分布式锁和队列
- 深度学习的tricks
- 数据交换格式-json-and-xml
- Codeforces 579C A Problem about Polyline【数学啊】【好不擅长啊】
- Go指南练习之《rot13Reader》
- C#传递形参
- 注解方式实现网络请求
- 1011. A+B和C (15)
- CocoaPods的安装使用和常见问题
- HANA: View refactoring failed due to error 'NullPointerException'
- 高性能网站架构之缓存篇--Redis使用配置端口转发
- 关于matconvnet的几个小程序(1)用滑动窗口框出树上的苹果