10月22日NOIP2018提高组省一冲奖班模测训练(二)
T1 LXL的雕像
题目描述
地主lxl拥有一块n×m的土地,有一天他突发奇想,想要在自己的土地上建造若干雕像来纪念自己的伟业。
已知每个雕像底座的尺寸均为l×l。为了美观, lxl想把雕像排列成一个矩形网格,每个雕像与其相邻的雕像(或者与土地边缘)的距离x全部相等,如下图所示.x可以为任意非负实数.lxl想在土地上摆尽可能多的雕像,请你告诉他此时x的取值应为多少。
输入格式
一行三个正整数表示l,n,m
输出格式
一行一个实数x,精确到小数点后六位。
如果无法摆下雕像,输出-1。
输入样例
2 18 13
输出样例
0.500000
数据范围
对于40%的数据,1≤a,h,w≤10^ 6
对于100%的数据,1≤a,h,w≤10^ 9
思路
我们记雕像的个数为N,则
显然,N是整数,则
和都是整数
那么分子分母都含有x,不太好计算,那么再进行分离整数,得
所以和 都是整数,易得是的因数
记,则
所以,这道题就完美的被解决了,上代码ヽ(¯▽¯)ノ
代码
#include <iostream>
#include <cstdio>
using namespace std;
int l, m, n, g;
double x;
int gcd (int a, int b)
{
return b == 0 ? a : gcd (b, a % b);
}
int main ()
{
scanf ("%d %d %d", & l, & n, & m);
g = gcd (m + l, n + l);
if (g < l || n < l || m < l){
printf ("-1");
return 0;
}
g = gcd (m + l, n + l);
x = 1.0 * g / (g / l) - l;
printf ("%.6lf", x);
return 0;
}