結果
| 問題 |
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
}
バカらっく