No.461
線分は でグループ分けしておく.
各グループから1本ずつ取ってきた3本の線分が大きな三角形の中で三角形を作れるかどうかを考える.
まず, 3本が1点で交わってはいけない.
まず, とおき, 頂点0,1を結ぶ辺のベクトルを , 頂点0,2を結ぶ辺のベクトルを とおくと, 頂点0の対辺に平行な線分と頂点1の対辺に平行な線分の交点の位置ベクトルは,
となり, 頂点0の対辺に平行な線分と頂点2の対辺に平行な線分の交点の位置ベクトルは,
となる. これが一致するということは,
ということであり,
を得る.
次に3本のうち2本が三角形の内部で交わらなければいけないという条件だが, これは,
ということであり, ここから
を得る.
これをすべての組み合わせで試すと の計算量が必要になるので TLE
である.
そこで, 2本を決めて が決まれば, の範囲が決まるので, をソートしておけば二分探索で求めることができる.
なお, は分数で持っておく. 分母分子に出てくる数値は最大でも なので, 分母分子は long
でもっておけば約分の必要はない.