【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()

sort

if __name__ == '__main__':

Counter

math

deque

itertools

Priority Queue

二分探索

再帰関数

BFS

DFS

bit全探索

nCr mod

DP

Union Find

Warshall Floyd

Bellman Ford

Z-Algorithm

BIT

NumPy

Scipy