题解 CF578A 【A Problem about Polyline】

· · 题解

首先易知当 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!}}$$