No.461

線分は でグループ分けしておく.

各グループから1本ずつ取ってきた3本の線分が大きな三角形の中で三角形を作れるかどうかを考える.

まず, 3本が1点で交わってはいけない.

まず, とおき, 頂点0,1を結ぶ辺のベクトルを , 頂点0,2を結ぶ辺のベクトルを とおくと, 頂点0の対辺に平行な線分と頂点1の対辺に平行な線分の交点の位置ベクトルは,

となり, 頂点0の対辺に平行な線分と頂点2の対辺に平行な線分の交点の位置ベクトルは,

となる. これが一致するということは,

ということであり,

を得る.

次に3本のうち2本が三角形の内部で交わらなければいけないという条件だが, これは,

ということであり, ここから

を得る.

これをすべての組み合わせで試すと の計算量が必要になるので TLE である.

そこで, 2本を決めて が決まれば, の範囲が決まるので, をソートしておけば二分探索で求めることができる.

なお, は分数で持っておく. 分母分子に出てくる数値は最大でも なので, 分母分子は long でもっておけば約分の必要はない.