競プロをPythonでやるときのチートシート
競プロをpythonでやるときのチートシートです
標準入力などよく使うものをまとめてみました
ジャンルでまとめてあります
標準入力
複数行はリスト内包表記かfor分で書くと良いです
スニペットにまとめとくと便利です
文字列一つ
標準入力の基本のき
input()
文字列が一行に複数
あまり使いません
文字列は複数行が多いと思います(灰色の感想)
input().split()
整数一つ
int(input())
整数が一行に複数
list(map(int,input().split()))
出力
入力の次に大事?
リストを空白区切りで出力
print(*A)
これだけです区切り文字を付けたい場合は引数にsepを追加します
改行区切りの例
print(*A,sep="\n")
数学系
1からnまでの総和
なんやかんや使います
愚直に計算する場合は$O(n)$ですが
この公式は$O(1)$です
そろそろ急かす声が出てくるとこなので公式を出します
\displaylines{
\frac{1}{2} \
n(n+1)
}
実装
int(n/2*(n+1))
$x$から$y$までの総和は
1から$y$までの総和-1から$x$までの総和です
簡単でしょ
ルート
i ** 0.5
これだけmath.sqrtを使う方法があるけどこっちのほうが楽
繰り返し二乗法
べき乗の$a^b$のbが30を超えるときに使用します
普通に使っても全然いいです
$O(log n)$なので$10^18$超えても60回しか計算しません
テンプレとして関数を用意しておきます
引数の$t$はmodを取る場合に使用します
def pow(x,n,t=1):
if t == 1:
ans = 1
while n:
if n%2:
ans = (ans*x)
x=(x*x)
n>>=1
return ans
ans = 1
while n:
if n%2:
ans = (ans*x)%t
x=(x*x)%t
n>>=1
return ans
便利系
heapq
優先度付きキュー計算量は
最後に
こんなもんかな
自分でチートシートを作る方法もあるのでぜひやってみてください
僕のチートシート↓↓
よかったら見てくださいただunionfindは鉄則本の丸パクリです