結果
問題 | No.199 星を描こう |
ユーザー |
![]() |
提出日時 | 2018-12-17 01:32:48 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 1,223 bytes |
コンパイル時間 | 144 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 10,880 KB |
最終ジャッジ日時 | 2024-09-25 07:30:35 |
合計ジャッジ時間 | 1,924 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
def det(p, q): return p[0] * q[1] - p[1] * q[0] def sub(p, q): return (p[0] - q[0], p[1] - q[1]) def get_convex_hull(points): # どの3点も直線上に並んでいないと仮定する。 n = len(points) points.sort() size_convex_hull = 0 ch = [] for i in range(n): while size_convex_hull > 1: v_cur = sub(ch[-1], ch[-2]) v_new = sub(points[i], ch[-2]) if det(v_cur, v_new) > 0: break size_convex_hull -= 1 ch.pop() ch.append(points[i]) size_convex_hull += 1 t = size_convex_hull for i in range(n - 2, -1, -1): while size_convex_hull > t: v_cur = sub(ch[-1], ch[-2]) v_new = sub(points[i], ch[-2]) if det(v_cur, v_new) > 0: break size_convex_hull -= 1 ch.pop() ch.append(points[i]) size_convex_hull += 1 return ch[:-1] def main(): n = 5 points = [list(map(int, input().split())) for i in range(n)] convex_hull = get_convex_hull(points) if len(convex_hull) == 5: print('YES') else: print('NO') if __name__ == "__main__": main()