
日刊競プロ ABC 224 - C - Triangle?-
問題文
xy 平面上に 1 から N までの番号が付いた N 個の点があります。
点 i は座標 (Xi,Yi) にあり、相異なる 2 点は異なる位置に存在します。
この N 点から 3 点を選ぶとき、選ばれた 3 点を線分で結んだ図形が正の面積を持つ三角形になるような点の選び方の総数を求めてください。
制約
入力は全て整数である
3≤N≤300
−10**9≤Xi,Yi≤10**9
i≠j ならば (Xi,Yi)≠(Xj,Yj)
考えたこと
三角形が正の面積を持てば良いので、3つの座標から面積を算出する公式を利用する。以下のサイトを参考にして公式を使った。
1/2*|(x1−x3)(y2−y3)−(x2−x3)(y1−y3)| で面積が算出できるので、3点をcombinationsで選んできて、この面積が正になるときだけカウントをするという考えで解いた。
import itertools
N = int(input())
XY = []
for _ in range(N):
x,y = map(int,input().split())
XY.append([x,y])
ans = 0
for v in itertools.combinations(XY,3):
if abs((v[0][0]-v[2][0])*(v[1][1]-v[2][1])-(v[1][0]-v[2][0])*(v[0][1]-v[2][1]))/2>0:
ans+=1
print (ans)