20251118 正睿

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\)!!

posted @ 2025-11-20 22:29  xiehanrui0817  阅读(0)  评论(0)    收藏  举报