結果
問題 | No.5017 Tool-assisted Shooting |
ユーザー | エセ賢者 |
提出日時 | 2023-07-16 16:41:03 |
言語 | Kotlin (2.1.0) |
結果 |
AC
|
実行時間 | 508 ms / 2,000 ms |
コード長 | 3,137 bytes |
コンパイル時間 | 15,243 ms |
コンパイル使用メモリ | 434,324 KB |
実行使用メモリ | 74,400 KB |
スコア | 1,108,381 |
平均クエリ数 | 760.08 |
最終ジャッジ日時 | 2023-07-16 16:42:12 |
合計ジャッジ時間 | 65,789 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge11 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 100 |
コンパイルメッセージ
Main.kt:10:10: warning: parameter 'args' is never used fun main(args: Array<String>) { ^ Main.kt:53:51: warning: unnecessary non-null assertion (!!) on a non-null receiver of type Enemy val near = sameLine.minBy { it.y }!! ^
ソースコード
private fun next() = readLine()!! private fun nextInt() = next().toInt() private fun nextLong() = next().toLong() private fun nextDouble() = next().toDouble() private fun nextList() = next().split(" ") private fun nextIntList() = next().split(" ").map { it.toInt() }.toIntArray() private fun nextLongList() = next().split(" ").map { it.toLong() }.toLongArray() private fun nextDoubleList() = next().split(" ").map { it.toDouble() }.toDoubleArray() fun main(args: Array<String>) { var turn = 0 var enemyList = mutableListOf<Enemy>() var own = 12 var power = 100 while (turn < 1000) { val n = nextInt() if (n == -1) { return } val newEnemyList = mutableListOf<Enemy>() for (enemy in enemyList) { val isAlive = enemy.nextTurn() if (isAlive) { newEnemyList.add(enemy) } } enemyList = newEnemyList for (i in 0 until n) { val hpx = nextIntList() enemyList.add(Enemy(hpx[2], 59, hpx[0], hpx[1])) } if (enemyList.isEmpty()) { println("S") } else { val sameLine = enemyList.filter { it.x == own } if (sameLine.isEmpty()) { if (enemyList.any { it.x == own - 1 && (it.y == 0 || it.y == 1) }) { println("R") own++ } else if (enemyList.any { it.x == own + 1 && (it.y == 0 || it.y == 1) }) { println("L") own-- } else { if (Math.random() < 0.5) { println("R") own++ } else { println("L") own-- } } } else { val near = sameLine.minBy { it.y }!! if (near.h > near.y * (power / 100)) { if (enemyList.any { it.x == own - 1 && (it.y == 0 || it.y == 1) }) { println("R") own++ } else if (enemyList.any { it.x == own + 1 && (it.y == 0 || it.y == 1) }) { println("L") own-- } else { if (Math.random() < 0.5) { println("R") own++ } else { println("L") own-- } } } else { val isAlive = near.hit(power / 100) println("S") if (!isAlive) { power += near.p enemyList.remove(near) } } } } turn++ } } class Enemy(var x: Int, var y: Int, var h: Int, var p: Int) { val maxH = h fun nextTurn(): Boolean { y-- return y >= 0 } fun hit(damage: Int): Boolean { h -= damage return h >= 0 } }