U138415 堆箱子 | 扩展欧几里得 扩欧

前置知识

  扩展欧几里得 传送门

题目描述

仓库中有很多的箱子,这天小武想把箱子收拾一下。仓库是一个长方体,我们不用考虑仓库的高度,仓库的长度为 N,宽度为M,箱子是一个标准的正方体,边长为L。小武很严格,对于箱子的摆放有很严格的要求。小武要求用若 干根直线等分仓库的长和宽,而箱子只能放在等分长和宽的直线的交点上,并且一个箱子到四个方向的距离(可能 是到另一个箱子, 也可能是到仓库的边缘),必须相同。那么在满足要求的前提下,小武想放心尽可能多的箱子, 那么此时一个箱子到四个方向的距离是多少呢?(设这个距离为x)
BNFhgf.jpg

输入格式

一行三个数表示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即可。

     

原文地址:https://www.cnblogs.com/ltdjcoder/p/13928017.html