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

来源:互联网 发布:java生成日志文件 编辑:程序博客网 时间:2024/04/27 16:33

题目地址

题目大意:给出一个整数点,问该点是否在y=x-2kp或y=-x+2kp上,k0和取整数,求最小正p

解题思路:若y>x,明显不可能; 若y=x,则p就为x;若x%y==0且x/y为奇数,则p为y;否则,kp=(x-y)/2或kp=(x+y)/2,要使p足够小,则k足够大,因y不可能比p大,将p代成y算出最大的k,再算出p比较即可

#include <bits\stdc++.h>using namespace std;int main(){    double x,y;    while(~scanf("%lf%lf",&x,&y))    {        double tmp1 = (x-y)/2;        double tmp2 = (x+y)/2;        if(x-y < 0)        {             puts("-1");             continue;        }        else if(x == y)        {            printf("%.12lf\n",x);            continue;        }        else        {            if((int)x%(int)y==0 && (int)x/(int)y%2)            {                printf("%.12lf\n",y);                continue;            }            else            {                int a = tmp1/y;                x = tmp1/a;                int b = tmp2/y;                y = tmp2/b;                x = min(x,y);                printf("%.12lf\n",x);            }        }    }    return 0;}




0 0