結果

問題 No.356 円周上を回る3つの動点の一致
ユーザー negistelnegistel
提出日時 2016-05-15 23:52:46
言語 Scala(Beta)
(3.4.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 945 bytes
コンパイル時間 9,969 ms
コンパイル使用メモリ 291,836 KB
最終ジャッジ日時 2024-11-14 19:44:47
合計ジャッジ時間 10,679 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
-- [E006] Not Found Error: Main.scala:18:46 ------------------------------------
18 |    val Array(a, b, c) = (0 until 3).map(_ => readLong).toArray
   |                                              ^^^^^^^^
   |                                              Not found: readLong
   |
   | longer explanation available when compiling with `-explain`
-- [E172] Type Error: Main.scala:18:63 -----------------------------------------
18 |    val Array(a, b, c) = (0 until 3).map(_ => readLong).toArray
   |                                                               ^
   |                                          No ClassTag available for B
   |
   |                                          where:    B is a type variable
-- [E172] Type Error: Main.scala:21:29 -----------------------------------------
21 |    val l = lcm(ab._2, bc._2)
   |                             ^
   |Ambiguous given instances: both object BigIntIsIntegral in object Numeric and object CharIsIntegral in object Numeric match type Integral[T] of parameter ev of method lcm in object Main
-- [E172] Type Error: Main.scala:24:62 -----------------------------------------
24 |    val (numerator, denominator) = reduceRational(l, gcd(x, y))
   |                                                              ^
   |Ambiguous given instances: both object BigIntIsIntegral in object Numeric and object CharIsIntegral in object Numeric match type Integral[T] of parameter ev of method gcd in object

ソースコード

diff #

import scala.math.Integral

object Main {
  def gcd[T](a: T, b: T)(implicit ev: Integral[T]): T = b match {
    case 0 => a
    case _ => gcd(b, ev.rem(a, b))
  }

  def lcm[T](a: T, b: T)(implicit ev: Integral[T]): T = ev.times(ev.quot(a, gcd(a, b)), b)

  def gcd[T](s: Seq[T])(implicit ev: Integral[T]): T = s.reduce(gcd[T])

  def lcm[T](s: Seq[T])(implicit ev: Integral[T]): T = s.reduce(lcm[T])

  def reduceRational[T](a: T, b: T)(implicit ev: Integral[T]): (T, T) = (ev.quot(a, gcd(a, b)), ev.quot(b, gcd(a, b)))

  def main(args: Array[String]): Unit = {
    val Array(a, b, c) = (0 until 3).map(_ => readLong).toArray
    val ab = reduceRational((a - b).abs, a * b)
    val bc = reduceRational((b - c).abs, b * c)
    val l = lcm(ab._2, bc._2)
    val x = ab._1 * l / ab._2
    val y = bc._1 * l / bc._2
    val (numerator, denominator) = reduceRational(l, gcd(x, y))
    println(numerator.toString + '/' + denominator.toString)
  }
}
0