10月22日NOIP2018提高组省一冲奖班模测训练(二)

T1 LXL的雕像

题目描述

 地主lxl拥有一块n×m的土地,有一天他突发奇想,想要在自己的土地上建造若干雕像来纪念自己的伟业。
 已知每个雕像底座的尺寸均为l×l。为了美观, lxl想把雕像排列成一个矩形网格,每个雕像与其相邻的雕像(或者与土地边缘)的距离x全部相等,如下图所示.x可以为任意非负实数.lxl想在土地上摆尽可能多的雕像,请你告诉他此时x的取值应为多少。

NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像

输入格式

一行三个正整数表示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,则

                                   NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像
显然,N是整数,则
NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像都是整数
那么分子分母都含有x,不太好计算,那么再进行分离整数,得
                                  NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像
所以NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像和  NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像都是整数,易得NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像的因数
NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像

                                   NOIP2018提高组省一冲奖班模测训练(二)T1 LXL的雕像
所以,这道题就完美的被解决了,上代码ヽ(¯▽¯)ノ

代码

#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;
}

 

相关文章: