開啟章節選單
Equation
題目
輸入一個數字(浮點數)c,請輸出 的解。
方法一 - 解題思路
發現 可以是小數,而且可以高達約 ,代表 的範圍很大,沒有辦法直接枚舉。
可以把題目想成這樣:找到最大滿足 的
因為如果某數字 符合不等式,比 小的數也一定符合。如果 不符合,比 大的也一定不符合。換句話說,他符合單調性。如果想要列舉 看是否符合不等式,可以使用「對答案二分艘」的技巧。
對於一個 ,如果他滿足不等式,代表答案 ,否則答案 。
方法二 - 解題思路
首先用一些簡單的數學把式子爆開:
然後最後直接用 四次方公式解 爆開即可:
常見錯誤
- 浮點數的 precision 要設為 而不是 ,否則會 WA
- 如果是 WA on test 4 的話,很有可能是因為浮點數精度問題(可能是上面的 / 沒有 set precision)
方法一程式碼
#include <bits/stdc++.h> using namespace std; int main() { double c, l = 1, r = 1e5; cin >> c; for (int i = 0; i < 100; i++) { double mid = (l + r) / 2; if (mid * mid + sqrt(mid) >= c) { r = mid; } else{ l = mid; } } cout << setprecision(7) << l << "\n"; }