• Luogu P2789 直线交点数


    题目描述:

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


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

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

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

    如何求交点:

    可以从简单的来看:

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

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

    三条直线:

    四条直线:

    image-20200417185734982

    五种方案;

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

    如果(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;
    }
    
  • 相关阅读:
    下拉选择框,允许手动输入和过滤
    MVC数据绑定
    一个页面多个ng-app注意事项
    modal 多层弹窗 Maximum call stack size exceeded 解决方法
    VS10x CodeMap 注册码(key):
    VS2015卸载再安装
    VS2015无法创建工程
    解决VS2015版本key required问题手动方案
    猪猪公寓—事后诸葛亮
    猪猪公寓——测试总结
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/12727364.html
Copyright © 2020-2023  润新知