首先突破口肯定在三角形不交,考虑寻找一些性质。
- 引理一:两个三角形不交当且仅当存在一个三角形的一条边所在直线将两个三角形分为异侧
证明可以参考:三角形相离充要条件,大致思路是取两个三角形重心连线,将其中一个三角形延重心连线平移两三角形总会相交,同时也能根据相交情况找到一条这样的直线。
- 引理二:若三角形任意三点不共线,则两个三角形不交当且仅当存在两条内公切线
根据引理一,将所得到的直线平移并旋转一定能得到两条内公切线。
直接借助引理一不好将问题分割,考虑利用引理二。
注意到一对不相交的三角形公切线数量为常数,于是枚举公切线的两个切点,问题转化为上下两个半平面内找出另外两种颜色的方案数,可以直接暴力统计。
发现同一种方案在会被四个有序切点对统计到,因此最后答案需要除 \(4\),复杂度 \(\mathcal{O}(n ^ 3)\).
考虑优化,枚举一个点,将其他所有点极角排序,半平面的颜色数按照极角排序枚举可以双指针优化,复杂度 \(\mathcal{O}(n ^ 2 \log n)\).