結果

問題 No.199 星を描こう
ユーザー tatt61880tatt61880
提出日時 2021-07-11 01:04:18
言語 Kuin
(KuinC++ v.2021.9.17)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,198 bytes
コンパイル時間 2,372 ms
コンパイル使用メモリ 148,688 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-16 12:40:19
合計ジャッジ時間 3,148 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 1 ms
5,376 KB
testcase_06 AC 1 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 1 ms
5,376 KB
testcase_10 AC 2 ms
5,376 KB
testcase_11 AC 2 ms
5,376 KB
testcase_12 AC 1 ms
5,376 KB
testcase_13 AC 2 ms
5,376 KB
testcase_14 AC 2 ms
5,376 KB
testcase_15 AC 1 ms
5,376 KB
testcase_16 AC 2 ms
5,376 KB
testcase_17 AC 1 ms
5,376 KB
testcase_18 AC 2 ms
5,376 KB
testcase_19 AC 2 ms
5,376 KB
testcase_20 AC 1 ms
5,376 KB
testcase_21 AC 2 ms
5,376 KB
testcase_22 AC 2 ms
5,376 KB
testcase_23 AC 2 ms
5,376 KB
testcase_24 AC 1 ms
5,376 KB
testcase_25 AC 2 ms
5,376 KB
testcase_26 AC 2 ms
5,376 KB
testcase_27 AC 1 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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) = 5
	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 - 1)
end func
0