25noip赠送赛day2之不住全季
B
\(y\) 没用,将 \(x, y\) 都除以 \(y\) 即可将 \(y\) 变成 \(1\)。
对于两个人 \(i, j\) 来说,只有当 \(x = \frac{b_i - b_j}{a_j - a_i}\) 时他们的顺序才能调换,否则就是确定的。转化一下,就是当 \(x\) 为 \((a_i, b_i)\) 与 \((a_j, b_j)\) 连线的斜率的相反数时顺序才是随意的。
不难发现 \(x = \frac{b_i - b_j}{a_j - a_i}\) 的排列方式包含了 \(x \ne \frac{b_i - b_j}{a_j - a_i}\) 。所以只需要考虑 \(x =\frac{b_i - b_j}{a_j - a_i}\) 的情况,方案数为 \(\prod k_i\),表示一条斜率为 \(x\) 的直线上有 \(k_i\) 个点。对于两个相邻的 \(x\),有一种方案是重复的,要减掉。
所以枚举两个点,算出每条直线上有几个点即可。(算 \(> 1\) 的情况。)
时间复杂度:\(O(n^2 \log n)\)。
注意 \(x > 0\)!!