結果

問題 No.550 夏休みの思い出(1)
ユーザー 6soukiti296soukiti29
提出日時 2017-08-02 20:25:13
言語 Nim
(2.0.2)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,851 bytes
コンパイル時間 816 ms
コンパイル使用メモリ 65,584 KB
最終ジャッジ日時 2024-11-14 20:11:16
合計ジャッジ時間 1,154 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
/home/judge/data/code/Main.nim(25, 12) Error: type mismatch
Expression: pow(F, Complex((1 / 3, 0.0)))
  [1] F: Complex
  [2] Complex((1 / 3, 0.0)): Complex

Expected one of (first mismatch at [position]):
[1] func pow(x, y: float32): float32
[1] func pow(x, y: float64): float64
[1] func pow[T](x, y: Complex[T]): Complex[T]
[1] func pow[T](x: Complex[T]; y: T): Complex[T]

ソースコード

diff #

import math,complex,strutils,sequtils,algorithm

proc `^`[T](x : T,i : int):T =
    if i == 1:
        return x
    elif i == 0:
        return 1
    elif i mod 2 == 0:
        return (x * x) ^ (i div 2)
    else:
        return ((x * x) ^ (i div 2)) * x

type
    Complex = tuple[re,im : float64]

proc solve3equation(a,b,c,d : float64):tuple[s,t,u : Complex]=
    var D = (-27 * a ^ 2 * d + 9 * a * b * c - 2 * b ^ 3) ^ 2 + 4 * (3 * a * c - b ^ 2) ^ 3
    var F,g,h : Complex
    var sq3 : float64
    sq3 = pow(2.0.float64, 1.float64 / 3.float64)
    if D < 0:
        F = ( - 27 * a ^ 2 * d + 9 * a * b * c - 2 * b ^ 3, sqrt(abs(D)))
    else:
        F = ( - 27 * a ^ 2 * d + 9 * a * b * c - 2 * b ^ 3 + sqrt(D),0.0)
    F = pow(F, (1 / 3, 0.0).Complex)
    result.s = F / (3 * pow(2.0, 1 / 3) * a) - sq3 * (3 * a * c - b * b) / (3 * a * F) - b / (3 * a)
    g = (1.0,sqrt(3.0))
    h = (1.0,-sqrt(3.0))
    result.t = - F * h / (6 * sq3 * a) + g * (3 * a * c - b * b) / (3 * sq3 ^ 2 * a * F) - b / (3 * a)
    result.u = - F * g / (6 * sq3 * a) + h * (3 * a * c - b * b) / (3 * sq3 ^ 2 * a * F) - b / (3 * a)

var
    a,b,c : int64
    x1,x2,x3 : Complex
    s,t,u : int64
(a,b,c) = stdin.readline.split.map(parseBiggestInt)

(x1,x2,x3) = solve3equation(1.0,a.float64,b.float64,c.float64)
(s,t,u) = (x1.re.int64,x2.re.int64,x3.re.int64)

var ans = newSeq[int](3)

block hosei:
    for i in -4..4:
        for j in -4..4:
            for k in -4..4:
                var
                    s2 = s + i
                    t2 = t + j
                    u2 = u + k
                if (s2 * t2 * u2 ==  - c and
                    s2 * t2 + t2 * u2 + u2 * s2 == b and
                    s2 + t2 + u2 == - a):
                    (ans[0],ans[1],ans[2]) = (s2.int,t2.int,u2.int)
                    break hosei
ans.sort(system.cmp)
echo ans.join(" ")
0