题解 CF578A 【A Problem about Polyline】
Level_Down
·
·
题解
首先易知当 a < b 时无解,然后讨论其他解的情况。
由于这是一个折线,所以我们可以把它分成两部分看,即用函数表达式表示为:
然后将经过的点 $(a,b)$ 带入,求折线前一个经过的 $x$ 轴上的点,求得为:
$(a - b,0)$ 或者 $(a + b,0)$。
然后我们考虑 $x$ 的最小值,首先 $x$ 不能小于 $b$,其次 $x$ 要能被 $a - b$ 或 $a + b$ 整除,并且除得的除数要是个偶数。
于是代入求解可以知晓 $x$ 的最小值的两种情况:
$\dfrac{a + b}{2 \times \dfrac{a + b}{2 \times b}}$ 或者 $\dfrac{a - b}{2 \times \dfrac{a + b}{2 - b}}$。
但是明显的,只需要算前一个就行了。
代码:
```cpp
#include <bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
cin >> a >> b;
if (a < b) cout << -1;
else printf("%.10f",(a + b) / (2.0 * ((a + b) / (2 * b))));
return 0;
}
```
$$\large{\texttt{------------ THE END ------------}}$$
$$\small{\texttt{Thanks for reading!}}$$