Codeforces Round #320 (Div. 1) A. A Problem about Polyline

来源:互联网 发布:ff14猫男捏脸数据分享 编辑:程序博客网 时间:2024/04/19 14:04

首先明确一点的是,所给的点(a,b)肯定在斜率为负的斜线上面使得x最小。
那么我们怎么确定是在哪一条折线呢?看下图:
这里写图片描述
每条斜率为-1的折线都可以被分成虚线间的几部分。这是使得x最小的分割方式,如果某个点虽然处于图中(1,1)(2,0)的折线上,但是属于的是第二条虚线下方、第三条虚线上方,那么我们可以通过将整个图形缩小,使得它处于第一条虚线下方、第二条虚线上方。于是x就缩小了。

也就是说,是那一条折线就是ab,如果是奇数的话,会算到斜率为1的折线上去,所以需要+1。使得我们的出来的k一定是一个偶数。

0=kx+Db=a+D

其中D为截距。
求得x

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int main(){    int a,b;    scanf("%d%d",&a,&b);    if(b>a)printf("-1\n");    else    {        int k=(a/b);        if(k&1)k++;        printf("%.12f\n",(a+b)*1.0/k);    }    return 0;}
0 0
原创粉丝点击