numpy用練習問題

numpyで簡潔に書けたり劇的に高速化できたりする問題一覧
競プロでPythonを使っているが、numpyをあまり使っていないという人はやってみるとnumpyの効果を実感できると思います。

D - Knapsack 1
典型的なナップサックDP。Pythonで愚直にfor文を回すやり方では間に合わないが、numpyを使ってfor文を減らすと劇的に高速化できる例。また、numpy.maximumで2つの配列の要素を比較していき、大きい方の要素を選んだ配列を作ることができる。
Submission #14017275 - Educational DP Contest


D - Lamp
こちらもKnapsack 1と同様に愚直にやると間に合わないが、工夫して配列ごと計算することでfor文を減らすことができる。
Submission #14016436 - AtCoder Beginner Contest 129


D - Good Grid
こちらは愚直にやると前処理がボトルネックとなりTLEしてしまう問題だが、簡単にfor文を減らすことができる。
Submission #14023232 - AtCoder Beginner Contest 099


D - AtCoder Express 2
numpy.ndarray.sum(総和)とnumpy.ndarray.cumsum(累積和)が使える。通常のリストでは列方向にsumを取ることができないが、numpyを使えばそれが可能となる。
Submission #13995334 - AtCoder Beginner Contest 106


B - Ruined Square
numpy.dotで行列の積を利用することができる。
Submission #14009262 - AtCoder Beginner Contest 108


D - Patisserie ABC
こちらも行列の積を利用する解法がある。
Submission #14001450 - AtCoder Beginner Contest 100


C - Sum of gcd of Tuples (Easy)
これは3重for文で愚直にやっても間に合うが、numpy.gcd.outerで簡潔に書ける。
Submission #14020240 - AtCoder Beginner Contest 162


C - 億マス計算
D - Pairs
二分探索を使う問題。Python標準のbisectを使ってもTLEしてしまう厳しい問題だが、numpy.searchsortedなどを駆使すると簡潔に書ける上、劇的に高速化できる。
Submission #13602083 - AtCoder Regular Contest 037
Submission #13609335 - AtCoder Beginner Contest 155