前置知识
扩展欧几里得 传送门
题目描述
仓库中有很多的箱子,这天小武想把箱子收拾一下。仓库是一个长方体,我们不用考虑仓库的高度,仓库的长度为 N,宽度为M,箱子是一个标准的正方体,边长为L。小武很严格,对于箱子的摆放有很严格的要求。小武要求用若 干根直线等分仓库的长和宽,而箱子只能放在等分长和宽的直线的交点上,并且一个箱子到四个方向的距离(可能 是到另一个箱子, 也可能是到仓库的边缘),必须相同。那么在满足要求的前提下,小武想放心尽可能多的箱子, 那么此时一个箱子到四个方向的距离是多少呢?(设这个距离为x)
输入格式
一行三个数表示L,N,M
输出格式
一行一个实数表示距离x,精确到小数点后五位 如果无法满足要求,输出-1
输入输出样例
输入 #1
2 18 13
输出 #1
0.50000
输入 #2
4 26 26
输出 #2
0.28571
输入 #3
3 46 18
输出 #3
0.50000
说明/提示
数据范围
对于24%的数据,1≤L≤100,1≤N,M≤1000
对于48%的数据,1≤L≤1000,1≤L,N,M≤10^6
对于80%的数据,1≤L≤10^6
对于100%的数据,1≤L,N,M≤10^9
样例解释
对于样例1,横排放7个箱子,竖排放5个箱子,x=(18-27)/8=(13-25)/6=0.50000
题解
题意解释
不解释
题解
其实可以推式子直接输出的,但我觉像我我这种蒟蒻只能用扩展欧几里得
先来看题, 设横着放x个,竖着放y个,显然题目是要让我们满足:
变乘法
如果刚学完扩欧, 一定可以想到变形成这样:
现在就变成扩欧板子题, 关于负数的处理可以看前面的那片博客。
因为要使得箱子最多, 就要让x*y最大,枚举所有可行的解, 取最大的x*y更新答案即可。
注意M-N要为正整数, 如果M<N 交换M, N即可。