题目大意:给出一个整数点,问该点是否在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;
}