【AtCoder】Pythonで競技プログラミングをするときのTips
追記:2021/03/14に固定を外しました。
自分用メモです
テンプレ
import sys readline = sys.stdin.readline sys.setrecursionlimit(10**8) mod = 10**9+7 #mod = 998244353 INF = 10**18 eps = 10**-7
入力
基本readlineで、文字列の時は改行文字が入ってしまうので.rstrip()する
import sys readline = sys.stdin.readline # 整数(1つ) N = int(readline()) # 整数(複数) x,y,z = map(int,readline().split()) # 整数(10^5) A = list(map(int,readline().split())) # 整数(1つだけ分ける) x,*A = map(int,readline().split()) # 整数(1つを複数行) A = [int(readline()) for _ in range(N)] # 整数(複数を複数行) A = [list(map(int,readline().split())) for _ in range(N)] # 文字列(1つ) S = readline().rstrip() # 文字列(複数) S = readline().rstrip().split()
defaultdict
from collections import defaultdict d = defaultdict(int) # 初期値を0にした辞書 d = defaultdict(lambda: 0) # 同様 d = defaultdict(lambda: 1) # 初期値が1 d = defaultdict(lambda: defaultdict(int)) # 引数を2つ取る d['key']['a'] += 3
配列
PyPyでの利用を想定
# 速い [None] * N [[None] * N for _ in range(N)] # 遅い(Pythonはこっちのほうが速いこともある!?特に2次元のとき) [None for _ in range(N)] [[None for _ in range(N)] for _ in range(N)]
enumerate,zip
楽な分岐
N = 1 if N == 1: print(0) exit()