質問内容
こちらの問題を解いていて、疑問に感じたことがあったため、質問させてください。
https://atcoder.jp/contests/joi2007ho/tasks/joi2007ho_c
関数を使用した場合と使用しなかった場合を比較した時に、
前者のコードの実行時間が8割程度短い結果となりました。
この時、何が原因で処理時間が大きく変化しているかを知りたいです。
確認したいポイントとしては、以下2点になります。
- 基本的にどんな場合でも、関数を挟んだ方が早いのか
- それとも、関数化しない場合に、遅くなる処理をしてしまっているのか
よろしくお願いいたします。
関数を使用した場合
python
1from itertools import permutations 2 3def solve(): 4 N = int(input()) 5 points = [tuple(map(int, input().split())) for _ in range(N)] 6 set_points = set(points) 7 ans = 0 8 for (x1, y1), (x2, y2) in permutations(points, 2): 9 dx, dy = x2-x1, y2-y1 10 if (x2-dy, y2+dx) not in set_points: continue 11 if (x1-dy, y1+dx) not in set_points: continue 12 ans = max(ans, dx**2+dy**2) 13 print(ans) 14solve()
https://atcoder.jp/contests/joi2007ho/submissions/26582973
関数を使用しなかった場合
python
1from itertools import permutations 2 3N = int(input()) 4points = [tuple(map(int, input().split())) for _ in range(N)] 5set_points = set(points) 6ans = 0 7for (x1, y1), (x2, y2) in permutations(points, 2): 8 dx, dy = x2-x1, y2-y1 9 if (x2-dy, y2+dx) not in set_points: continue 10 if (x1-dy, y1+dx) not in set_points: continue 11 ans = max(ans, dx**2+dy**2) 12 13print(ans)
https://atcoder.jp/contests/joi2007ho/submissions/26582880
補足情報(FW/ツールのバージョンなど)
Python(3.8.2)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/17 04:01