LoginSignup
0
1

More than 1 year has passed since last update.

【知らなければハマる】AtCoderのF問題は、Python3の代わりにPyPyを使え!

Posted at

参考サイト:

AtCoderのF問題をやっていると、同じ解法なのに、なぜかTLE(時間オーバー)になってしまう事があります。

原因がわからないため、何時間も迷路に迷い込みます。
たとえば、
・関数化と直書きの違い?
・変数を経由させるのと一行で書くのの違い?
など。
実際は、上記の違いはACTLEを分けるほどのレベルではありません。
(実際に時間を計測したら、自分の方が速い場合もある)

違いは、Python3 で提出したか、 PyPy3で提出したかの違いだけでした。

たとえば、2022/11/5 (AtCoder Beginner Contest 276)のF問題

詳細は割愛しますが、フェニック木を使って $O(N^2)$ の内容を$O(log(N))$の計算量で解きます。
しかし・・・・
Python3で提出すると、それでもTLEになります。
(私のローカルPCの環境では$N=10^5$で、2.3-2.8秒)

逆に、PyPy3で提出すると、セグメント木で、ビット演算の表記 (i & -iなど)を使わなくても、ACとなります。

結果一覧を検索する時に、言語をPython3にしても、PyPy3も一緒に表示されるため、提出時にPyPy3が選べる、という事に気づきませんでした。

これは、知らなければ確実にハマる内容です。
私も、ハマった挙句、ネットを検索して、表題の結論にたどり着きました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1