結果
問題 |
No.58 イカサマなサイコロ
|
ユーザー |
![]() |
提出日時 | 2019-09-22 08:48:38 |
言語 | Kotlin (2.1.0) |
結果 |
AC
|
実行時間 | 344 ms / 5,000 ms |
コード長 | 1,841 bytes |
コンパイル時間 | 19,829 ms |
コンパイル使用メモリ | 456,168 KB |
実行使用メモリ | 52,012 KB |
最終ジャッジ日時 | 2024-09-19 03:25:16 |
合計ジャッジ時間 | 20,786 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
コンパイルメッセージ
Main.kt:3:10: warning: parameter 'arr' is never used fun main(arr:Array<String>) { ^
ソースコード
import java.lang.Long.sum fun main(arr:Array<String>) { val (dice, ikasama) = (1..2).map { readLine()!!.toInt() } val taroPatttern = getIkasamaAns(dice, ikasama) val jiroPattern = getAns(dice) var winCount = 0.toLong() var loseCount = 0.toLong() var drawCount = 0.toLong() for(i in taroPatttern.keys) { winCount += taroPatttern[i]!! * jiroPattern.filter { it.key < i }.map { it.value }.sum() drawCount += taroPatttern[i]!! * jiroPattern.filter { it.key == i }.map { it.value }.sum() loseCount += taroPatttern[i]!! * jiroPattern.filter { it.key >i }.map { it.value }.sum() } var ans = winCount.toDouble() / (winCount + loseCount + drawCount) println(ans) } val ikasamaDic = mutableMapOf<Int,MutableMap<Int, Long>>() fun getAns(remain:Int):MutableMap<Int, Long> { if(remain == 1) { return (1..6).map { Pair(it, 1.toLong()) }.toMap().toMutableMap() } val ans = mutableMapOf<Int,Long>() val ret = getAns(remain - 1) for(i in (1..6)) { for (j in ret.keys) { ans[i+j]?.also { ans[i+j] = it + ret[j]!! }?: run { ans[i+j] = ret[j]!! } } } return ans } fun getIkasamaAns(remain:Int, ikasamaRemain:Int):MutableMap<Int, Long> { if(ikasamaRemain <= 0) { return getAns(remain) } if(remain == 1) { return (4..6).map { Pair(it, 2.toLong()) }.toMap().toMutableMap() } val ans = mutableMapOf<Int,Long>() val ret = getIkasamaAns(remain - 1, ikasamaRemain - 1) for(i in (1..6)) { for (j in ret.keys) { val key = (((i-1)%3) + 4) + j ans[key]?.also { ans[key] = it + ret[j]!! }?: run { ans[key] = ret[j]!! } } } return ans }