結果
| 問題 |
No.955 ax^2+bx+c=0
|
| コンテスト | |
| ユーザー |
しぶつまひ
|
| 提出日時 | 2019-12-18 08:01:33 |
| 言語 | F# (F# 4.0) |
| 結果 |
AC
|
| 実行時間 | 377 ms / 2,000 ms |
| コード長 | 1,388 bytes |
| コンパイル時間 | 14,437 ms |
| コンパイル使用メモリ | 191,248 KB |
| 実行使用メモリ | 37,664 KB |
| 最終ジャッジ日時 | 2024-09-18 22:09:50 |
| 合計ジャッジ時間 | 56,407 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 122 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (291 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
let e30 = bigint 1e30
let e16 = bigint 1e16
let abc =
stdin.ReadLine().Split(' ')
|> Array.map int
let conv (x:bigint)=
let y = string <| abs x / e30
let z = string <| (abs x % e30) + e30
let s = if x < bigint 0 then "-" else ""
s + y + "." + (z.Substring(1))
let pr (xs:bigint list) =
printfn "%d" (List.length xs)
List.sort xs
|> List.map conv
|> List.iter (printfn "%s")
let sq (x:bigint) =
let rec f e y z =
if abs (x * e30 - e * e) < e16 * e30 then
e
elif e * e < x * e30 then
f ((e+z)/bigint 2) e z
else
f ((y+e)/bigint 2) y e
f (x/bigint 2) (bigint 0) x
match abc with
| [|0;0;0|] -> printfn "-1"
| [|0;0;_|] -> printfn "0"
| [|0;b;c|] -> pr [-bigint c * e30 / bigint b]
| [|a;0;0|] -> pr [bigint 0]
| [|a;0;c|] when -bigint c * e30 / bigint a < bigint 0 -> printfn "0"
| [|a;0;c|] -> let e = -bigint c * e30 / bigint a in let ee = sq e in pr [-ee; ee]
| [|a;b;0|] -> pr [bigint 0; -bigint b * e30 /bigint a]
| [|a;b;c|] ->
let d = bigint b * bigint b - bigint 4 * bigint a * bigint c
if d < bigint 0 then
printfn "0"
elif d = bigint 0 then
pr [- bigint b * e30 / (bigint 2 * bigint a)]
else
let y = (-bigint b * e30 + sq (d *e30)) / (bigint 2 * bigint a)
let z = (-bigint b * e30 - sq (d * e30)) / (bigint 2 * bigint a)
pr [y;z]
| _ -> ()
しぶつまひ