結果
| 問題 |
No.1835 Generalized Monty Hall Problem
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-02-21 23:13:09 |
| 言語 | Scala(Beta) (3.6.2) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,178 bytes |
| コンパイル時間 | 12,392 ms |
| コンパイル使用メモリ | 262,456 KB |
| 実行使用メモリ | 63,284 KB |
| 最終ジャッジ日時 | 2024-06-30 01:57:39 |
| 合計ジャッジ時間 | 24,680 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 2 WA * 9 |
ソースコード
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
import scala.io.StdIn.*
import scala.util.chaining.*
import scala.math.*
import scala.reflect.{ClassTag, classTag}
import scala.util.*
import scala.annotation.tailrec
class Rational private (private var num: Long, private var den: Long):
def numerator: Long = num
def denominator: Long = den
def +(other: Rational): Rational = Rational.from(num * other.den + den * other.num, den * other.den)
def -(other: Rational): Rational = Rational.from(num * other.den - den * other.num, den * other.den)
def *(other: Rational): Rational = Rational.from(num * other.num, den * other.den)
def /(other: Rational): Rational = Rational.from(num * other.den, den * other.num)
def +=(other: Rational) =
val (n, d) = Rational.normalize(num * other.den + den * other.num, den * other.den)
num = n
den = d
def -=(other: Rational) =
val (n, d) = Rational.normalize(num * other.den - den * other.num, den * other.den)
num = n
den = d
def *=(other: Rational) =
val (n, d) = Rational.normalize(num * other.num, den * other.den)
num = n
den = d
def /=(other: Rational) =
val (n, d) = Rational.normalize(num * other.den, den * other.num)
num = n
den = d
object Rational:
given Ordering[Rational] with
override def compare(x: Rational, y: Rational) = (x - y).num.compare(0)
private inline def normalize(num: Long, den: Long): (Long, Long) =
val g = gcd(num.abs, den.abs)
val sign = num.sign * den.sign
(num.abs * sign / g, den.abs / g)
def from(num: Long, den: Long): Rational =
val (n, d) = normalize(num, den)
Rational(n, d)
@tailrec
def gcd(a: Long, b: Long): Long =
b match
case 0 => a
case _ => gcd(b, a % b)
@main def main =
import Rational.given_Ordering_Rational.mkOrderingOps
val Array(n, m, k) = readLine.split(' ').map(_.toLong)
val notMove = Rational.from(m, n)
val move = Rational.from(m, n) * Rational.from(m - 1, n - k - 1) + Rational.from(n - m, n) * Rational.from(m, n - k - 1)
val max = if notMove < move then move else notMove
println(s"${max.numerator} ${max.denominator}")