結果
| 問題 | 
                            No.199 星を描こう
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2021-07-11 00:19:24 | 
| 言語 | Kuin  (KuinC++ v.2021.9.17)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 2 ms / 2,000 ms | 
| コード長 | 1,172 bytes | 
| コンパイル時間 | 2,505 ms | 
| コンパイル使用メモリ | 148,812 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-09-16 12:40:07 | 
| 合計ジャッジ時間 | 3,329 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge6 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 25 | 
ソースコード
func main()
	var p: []@Point :: #[5]@Point
	for i(0, 4)
		var x: int :: cui@inputInt()
		var y: int :: cui@inputInt()
		do p[i] :: (#@Point).init(x, y)
	end for
	var ans: bool :: ^@convexHull(p) = 6
	do cui@print((ans ?("YES", "NO")) ~ "\n")
end func
class Point()
	+var x: int
	+var y: int
	+func init(x: int, y: int): Point
		do me.x :: x
		do me.y :: y
		ret me
	end func
	+func cross(a: Point, b: Point): int
		ret(a.x - me.x) * (b.y - me.y) - (a.y - me.y) * (b.x - me.x)
	end func
	+*func cmp(t: kuin@Class): int
		if(me.x < (t $ Point).x)
			ret - 1
		elif(me.x > (t $ Point).x)
			ret 1
		elif(me.y < (t $ Point).y)
			ret - 1
		elif(me.y > (t $ Point).y)
			ret 1
		end if
		ret 0
	end func
end class
func convexHull(p: []@Point): []@Point
	var n: int :: ^p
	var k: int :: 0
	var res: []@Point :: #[n + 1]@Point
	do p.sort()
	for i(0, n - 1)
		while(k >= 2 & res[k - 2].cross(res[k - 1], p[i]) <= 0)
			do k :- 1
		end while
		do res[k] :: p[i]
		do k :+ 1
	end for
	var t: int :: k + 1
	for i(n - 2, 0, -1)
		while(k >= t & res[k - 2].cross(res[k - 1], p[i]) <= 0)
			do k :- 1
		end while
		do res[k] :: p[i]
		do k :+ 1
	end for
	
	ret res.sub(0, k)
end func