Python3で競技プログラミングする時の標準入力のまとめ
[mathjax]
Python3での標準入力のまとめです。
競技プログラミングなどで使えるメモ書きの意味も込めてです。
基本はinput()
標準入力はinput関数を用います。input()は入力された文字を文字列で扱うので、数字を扱う場合は型変換が必要です。
標準入力のまとめ
S (文字列)
入力
[latex]S[/latex]
コード
S = input()
または、型を明確にするために
S = str(input())
と書くこともできます。
x (整数)
入力
[latex]x[/latex]
コード
x = int(input())
f (小数)
入力
[latex]f[/latex]
コード
f = float(input())
x y (一列に複数の入力)
入力
[latex]x \quad y[/latex]
コード(x, yが整数の場合)
x, y = map(int, input().split())
もし入力が複数の文字列
[latex]i \quad j \quad k [/latex]
の場合、
i, j, k = map(str, input().split())
とすれば良い。
入力が小数の時は、int、strだった部分をfloatにする。
A1, A2, …, An(横一列の配列)
入力
[latex] A_1, A_2, \dots , A_{n} [/latex]
コード(Aiが整数の場合)
A = [int(i) for i in input().split()]
Aiが文字列の場合はint(i)の部分をstr(i)にするか、iにすればよいです。
コード(Aiが文字列の場合)
A = [str(i) for i in input().split()]
A = [i for i in input().split()]
コード上では、配列AはA[0], A[1], …, A[n-1]なので注意が必要です。
B1, B2, …, Bn (縦一列の配列)
入力
[latex] B_1 \\ B_2 \\ \vdots \\ B_n [/latex]
コード(Biが整数の場合)
B = [int(input()) for i in range(n)]
例えば、入力が
[latex] N \\ B_0 \\ B_1 \\ \vdots \\ B_{N-1} [/latex]
の場合は、コードは
N = int(input())
B = [int(input()) for i in range(N)]
となります。
Biが文字列の場合はint(input())をstr(input())かinput()に、小数の場合はfloat(input())にします。
2次元配列の入力
入力
[latex] x_1 \quad y_1 \quad z_1 \\ \vdots \\ x_N \quad y_N \quad z_N [/latex]
コード
data = [list(map(int, input().split())) for _ in range(N)]
ここでは、
data[0] == [x1, y1, z1]
となります。
複数の問題を解く場合などでこの形式が与えられた場合には、
for i in range(N):
x, y, z = map(int, input().split())
# 何かの処理
とすることも多いです。
入力が以下のような場合も同じコードが使えます。
入力
[latex] x_{0,0} \quad x_{0,1} \dots x_{0, K-1} \\ \vdots \quad \ddots \\ x_{N-1,0} \quad x_{N-1,1} \dots x_{N-1, K-1} [/latex]
コード
data = [list(map(int, input().split())) for _ in range(N)]
まとめ
これらを組み合わせた入力の場合には、コードを順番に書くことで順番に処理していきます。
例えば入力が
[latex] S \\ N \quad x \quad y \quad z \\ B_1 \\ B_2 \\ \vdots \\ B_N [/latex]
の場合(ただし、Sは文字列で、それ以外が整数)は、コードは
S = input()
N, x, y, z = map(int, input().split())
B = [int(input(i) for i in range(N)]
と書けば良いです。
これまでに書いた標準入力が扱えれば、競技プログラミングでの標準入力は大体問題なく出来るはずです。