これはなに
ついこないだ,競プロに初参戦してみました.
とりあえず腕試しということで,事前知識ほぼ皆無で挑んでみたのですが,入力が受け取れないのなんの.
僕がPythonどちゃくそ初心者というのもありますが,ついさっきsupercellに色々教えてもらったので,忘れないようにメモっとこうと思います.
要するに備忘録
パターンと解法
こんなタイトルの参考書,中学生くらいのときにあったな...
数値1つだけを受け取る
まずは1番シンプルなパターンから.
数値N
が与えられたとします.
N = input()
簡単ですね!
2つの数値を受け取る
2つの数値N, M
がN M
の形式で与えられるとします.
この場合,僕は
i = input().split()
N = int(i[0])
M = int(i[1])
みたいな感じでやってました.キモいです.
こういうときはmap()
を使えば解決します.
N, M = map(int, input().split())
たったこれだけ!
複数の数値を1行で受け取る
$a_0, a_1, a_2, ..., a_n$ という数列が
a_0 a_1 a_2 ... a_n
というような形式で与えられるとします.
先ほどは受け取る個数がわかっていたのでmap()
を使って対応できましたが,今度はいくつの数値を受けとるかわかりません.
こんなときはlist()
を使いましょう!
a = list(map(int, input().split()))
# a[k]にはa_kが入っています
簡単!
複数の数値を1列で受け取る
$a_0, a_1, a_2, ..., a_{N-1}$ というN個の数値からなる数列が
N
a_0
a_1
a_2
.
.
.
a_(N-1)
という形式で与えられるとします.
僕の場合,いままではfor文を愚直に回して入力を受け取っていました.
ただ,内包表記を使ったほうが多少速いです.Python自体遅いので誤差程度って言ってた.
N = int(input())
a = [int(input()) for _ in range(N)]
# a[k]にはa_kが入っています
めちゃシンプル!
これらを組み合わせることで様々な入力パターンに対応することができます!
まとめ
本質ではないところで多少消耗したのでまじつらたん.