結果
| 問題 |
No.26 シャッフルゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-01-03 16:33:21 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 342 ms / 5,000 ms |
| コード長 | 2,007 bytes |
| コンパイル時間 | 13,534 ms |
| コンパイル使用メモリ | 440,780 KB |
| 実行使用メモリ | 52,084 KB |
| 最終ジャッジ日時 | 2024-11-20 17:21:02 |
| 合計ジャッジ時間 | 17,847 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
Main.kt:21:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
ソースコード
// No.26 シャッフルゲーム
// https://yukicoder.me/problems/no/26
package no01.yukicoder.no26
import java.util.Collections.swap
/** インプットデータ */
data class InputData(
/** ○印が付いているカップの位置 */
val firstIndex: Int,
/** カップを入れ替えた回数 */
val count: Int,
/** 入れ替えるカップの位置番号 */
val replacement: List<Pair<Int, Int>>
)
/**
* エントリポイント
*/
fun main(args: Array<String>) {
val input = getStandardInput()
println(shuffleGame(input))
}
/**
* ○印がついているカップの位置を返します。
*/
fun shuffleGame(input: List<String>): Int {
val data = createInputData(input)
val mark = mutableListOf(0, 0, 0)
// 初期値の設定
for (i in mark.indices) {
if (i == data.firstIndex - 1) {
mark[i] = 1
}
}
// 入れ替え
for (v in data.replacement) {
val (x, y) = v
swap(mark, x - 1, y - 1)
}
// 解答を探す
for ((i, v) in mark.withIndex()) {
if (v == 1) {
return i + 1
}
}
// ここには来ない
return 0
}
/**
* 標準入力から取得した文字列をInputDataに変換して返します。
*/
fun createInputData(input: List<String>): InputData {
val firstIndex = input[0].toInt()
val count = input[1].toInt()
val replacement = mutableListOf<Pair<Int, Int>>()
for ((i, v) in input.withIndex()) {
if (i == 0 || i == 1) {
continue
}
val sp = v.split(" ")
replacement.add(Pair(sp[0].toInt(), sp[1].toInt()))
}
return InputData(firstIndex, count, replacement)
}
/**
* 標準入力から文字列を全て取得します。
*/
fun getStandardInput(): List<String> {
val lines = mutableListOf<String>()
var line: String?
line = readLine()
while (line != null) {
lines.add(line)
line = readLine()
}
return lines
}