首页 > 其他 > 详细

Luogu P2789 直线交点数

时间:2020-04-18 20:54:48      阅读:49      评论:0      收藏:0      [点我收藏+]

题目描述:

平面上有\(N\)条直线,且无三线共点,那么这些直线能有多少不同的交点数?


这道题的关键在于: 我们认为线与线之间只存在平行或相交,而不考虑具体位置,并且无三线共点。

因此我们只需考虑直线的平行与相交关系。

此题的目的是求交点方案数

如何求交点:

可以从简单的来看:

一条直线,必然只有一种方案;

两条直线:两条直线平行,\(0\)个交点,两条直线相交,\(1\)个交点,两种方案

三条直线:

技术分享图片

四条直线:

技术分享图片

五种方案;

通过上面的举例,发现可以按照有几条直线平行进行讨论;

如果\(m\)条直线有\(r\)条直线平行,那么剩下的\((m-r)\)条直线,每条直线都会与这\(r\)条直线相交

也就会产生\(r*(m-r)\)个交点,然后再考虑这剩下的\((m-r)\)条直线内部的相交平行关系,我们发现这是一个递归问题

技术分享图片

因此我们可以递归来做,因为要求的是共有几种不同的交点方案,因此我们可以将每一种不同的方案求出来的交点数标记,最后统计答案;

\(code:\)

#include<bits/stdc++.h>

using namespace std;

int n,ans;
bool p[10010];

int g(int n,int k) {
	if(n==0) 
		p[k]=1;
	else 
		for(int i=n;i>=1;i--) 
			g(n-i,i*(n-i)+k);
}

int main() {
	scanf("%d",&n);
	g(n,0);
    for(int i=0;i<=10009;i++)
        if(p[i]) 
            ans++;
	printf("%d",ans);
	return 0;
}

Luogu P2789 直线交点数

原文:https://www.cnblogs.com/zhuier-xquan/p/12727364.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!