RIT Tech Blog

株式会社RITのエンジニアが知見を共有する技術ブログです。

【Python】AtcoderでTLEになる計算量の閾値を調べてみた 【PyPy】

目的

最近趣味でAtcoderという競技プログラミングサイトで活動をしているのですが、 提出するコードの計算量をかなりざっくりと見積もってしまっていて、提出した結果、指定された実行時間を超えてしまいTLE(Time Limit Exceeded)になってしまうことが多いので、 どの程度の計算量であればTLEにならずに実行できるのか調査してみました

調べてみた

環境

言語: PyPy 実行時間制限: 2 sec メモリ制限: 1024 MB

10 ** 7回ループ回してみる

for _ in range(10 ** 7):
    a = 'a'

N = int(input())
print(((N - 1) // 100) + 1)

f:id:keimaeda0817:20211129180731p:plain 10**7までは大丈夫そうですね、ただ487msかかっているので10**8ループだとTLEになりそうです

10 ** 8回ループにしてみる

for _ in range(10 ** 8):
    a = 'a'

N = int(input())
print(((N - 1) // 100) + 1)

f:id:keimaeda0817:20211129181036p:plain TLEになりました。今回ループ内で行っている処理がかなり簡単なものなので、どのような処理でも10**8以上のループはTLEになりそうです

結果

10 ** 7回のループまでならTLEにならずに実行できることが分かりました。 C問題などを解いていても体感10 ** 7くらいまでなら通るので、体感通りでした。