P2789 直线交点数

时间:2021-08-25
本文章向大家介绍P2789 直线交点数,主要包括P2789 直线交点数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目传送门

我们将\(n\)条直线编号,分别称为直线\(1\)、直线\(2\)、…、直线\(n\)。直线\(2\) 与直线\(1\) 最多有一个交点,直线\(3\)与直线\(1\)和直线\(2\)最多有\(2\)个交点,……,直线\(n\)与其它 \((n-1)\) 条直线最多 \((n-1)\) 个交点。

由此看出,\(n\)条无三线共点的直线最多的交点数 \(max=1+2+…+(n-1)=n(n-1)/2\)

但本题我们要求解的是:这 \(n\) 条直线共有多少种不同的交点数? 仍然从举例出发。下面列举了 \(n=1、2、3、4\) 四种情况各自的交点情况:

具体分析一下 \(n=4\) 的情况:

  • \(4\) 条直线全部平行,则 \(0\) 交点 \({ =4*(4-4)}\)

  • 其中 \(3\) 条直线平行,则 \(3\) 交点 \({ =3*(4-3) }\)

  • 其中 \(2\) 条直线平行,则这\(2\)条直线与另\(2\)条直线的交点数为\(4\),而另\(2\)条直线之间可能有\(0\)个或\(1\)个交点(见 \(n=2\) 的情况,共 \(4\) 个交点或 \(5\) 个交点。\({=2*(4-2)+0 或 1 }\)

  • \(4\) 条直线均不平行(可看成 \(1\) 条直线平行),这 \(1\) 条直线与其它 \(3\) 条直线的交点数为 \(3\),而其 它 \(3\) 条直线之间的交点数为 \(3\),共 \(6\) 个交点。\({ =1*(4-1)+3 }\)

经过以上分析,我们可以得如下结论:

m 条直线的交点方案=r 条平行线与(m-r)条直线交叉的交点数+(m-r)条直线本身的交点方案

=r*(m-r)+(m-r)条直线本身的交点方案 (1<=r<=m)

在具体编程时,我们设置一个标志数组 f[0..max],在使用上述结论递归求解的过程中,每得到一种交点数 k,则置 f[k]为 true(初始 f[0]~f[max]均为 false)。

原文地址:https://www.cnblogs.com/littlehb/p/15184254.html