0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder B,C問題をKotlinで解こう - ABC268

Posted at

当記事ではAtCoder、ABCのB問題ならびにC問題(時々D問題も)のKotlinでの解法を超初心者向けに詳細に解説します。

B - Prefix?

やりたいこと

文字列Tが文字列Sで始まるかどうかを判定しよう。やり方は色々あるが、StringstartsWith メソッドを使用するのが手軽だろう。

入力値の取得

    // 入力値の取得
    val s = readLine()!!
    val t = readLine()!!

サンプルコード

main.kt
fun main(args: Array<String>) {
    // 入力値の取得
    val s = readLine()!!
    val t = readLine()!!

    // t が s で始まるかどうか
    val isPrefix = t.startsWith(s)

    println(if (isPrefix) "Yes" else "No")
}

C - Chinese Restaurant

やりたいこと

それぞれの料理を何回移動させれば満足できるのかを見ていこう。料理 $p^i$ は位置が以下3通りの場合に満足となる。

  • $(p^i - 1)\ mod \ N$
  • $p^i \ mod \ N$
  • $(p^i + 1)\ mod \ N$

これらと現在位置 ( i )との差 ( m とする) を求めて、mをキーとするMutableMapに件数を計上しよう。最終的にマップの値のうち一番大きいものが答えとなる。

入力値の取得

    // 入力値の取得
    val n = readLine()!!.toInt()
    val p = readLine()!!.split(" ").map { it.toInt() }

サンプルコード

main.kt
fun main(args: Array<String>) {
    // 入力値の取得
    val n = readLine()!!.toInt()
    val p = readLine()!!.split(" ").map { it.toInt() }

    val cnt = mutableMapOf<Int, Int>()
    for (i in p.indices) {
        // 料理を満足できる人のリスト
        val targets = (-1..1).map { getNum(p[i] + it, n) }
        targets.forEach {
            // 料理を満足できる人のところまで動かす移動量を求める
            val diff = getNum(it - i, n)
            // 移動量をキーとしたMutableMapに件数を計上していく
            cnt[diff] = (cnt[diff] ?: 0) + 1
        }
    }
    println(cnt.values.max())
}

fun getNum(target: Int, n: Int): Int {
    var ret = target
    while (ret < 0) {
        ret += n
    }
    return ret % n
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?