HDU 1466 直线交点情况

 

的BestCoder(有米!)

计算直线的交点数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 8881    Accepted Submission(s): 4006

Problem Description

平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。

比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。

Input

输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.

Output

每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。

Sample Input

2
3

Sample Output

0 1
0 2 3

Author

lcy

Source

ACM暑期集训队练习赛(九)

Recommend

lcy   |   We have carefully selected several similar problems for you:  1176 1087 1003 1159 2084

#include <cstdio>
#include <cstring>

int d[22][220];

int main()
{
    memset(d, 0, sizeof d);
    for(int i = 0; i <= 20; i++)
        d[i][0] = 1;

    for(int n = 2; n <= 20; n++)
        for(int i = 1; i < n; i++)
        for(int j = 0; j <= ((n - i) * (n - i - 1)) / 2; j++)
        if(d[n - i][j])
        d[n][i * (n - i) + j] = 1;

    int n;
    while(~scanf("%d", &n))
    {
        int t = (n * (n - 1)) / 2;
        for(int i = 0; i <= (n * (n - 1)) / 2; i++)
        if(d[n][i])
        i == t ? printf("%d\n", i) : printf("%d ", i);
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 13:35:56

HDU 1466 直线交点情况的相关文章

hdu 1466 计算直线的交点数

http://acm.hdu.edu.cn/showproblem.php?pid=1466 N条直线的交点方案数 = c 条直线交叉的交点数与(N-c)条平行线 + c 条直线本身的交点方案 = (N - c) * c  + c 条直线之间的交点数. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int dp[21][200]; 7

hdu 1466 计算直线的交点数 动态规划第一题

计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8578    Accepted Submission(s): 3857 Problem Description 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). Input 输入数据包含多

hdu 1466 计算直线的交点数 递推

以前做这道题目的时候,花了好长时间找规律,感觉十分高大上,今天回顾这个题目的时候,突然有了顿悟, 有了递推的思想就容易解决了. 题意:给你n条直线,问:输出这些直线所有相交情况下的交点个数(升序输出) 解题思路:我们可以从n-1条直线相交的情况推导出n条直线的相交情况,考虑到直线的关系不是相交就是平行,我们可以推倒一下n=4的情况: 已知n=3时有0,2,3; (1):第四条直线与前三条平行,则有0; (2):第四条直线与其中两条平行,则有3; (3):第四条直线与其中一条平行,则有4,5; (

Fermat Point in Quadrangle(hdu 3694 求两直线交点

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3694 画几个图应该就可以知道凸四边形就是对角线交点 凹四边形就是凹进去的那个点 so 只要枚举四个点以及对角线交点 找个minn就可以 求两直线交点模板: double cross(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } bool getcross(double x1,double y1,double x2,d

HDU 1466

经典DP,这样的递推确实有点难. 把所有直线分成两组,可以知道 m条直线的交点方案数 =(m-r)条平行线与r条直线交叉的交点数  + r条直线本身的交点方案 亦就是  =(m-r)*r+r条之间本身的交点方案数(0<=r<m): 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 bool ans[25][250]; 6 7 int main(){ 8 memset(ans,fals

n条直线交点拟合求交点

直线方程的公式有以下几种形式: 斜截式:y=kx+b 截距式:x/a+y/b=1 两点式:(x-x1)/(x2-x1)=(y-y1)/(y2-y1) 一般式:ax+by+c=0(可以表达任意直线) 只要知道两点坐标,代入任何一种公式,都可以求出直线的方程 一般式方程在计算机领域的重要性 常用的直线方程有一般式 点斜式 截距式 斜截式 两点式等等.除了一般式方程,它们要么不能支持所有情况下的直线(比如跟坐标轴垂直或者平行),要么不能支持所有情况下的点(比如x坐标相等,或者y坐标相等).所以一般式方

编程求取直线一般式表达式,两直线交点

背景介绍 ??最近在水面无人艇(USV)模拟仿真中,用到了一些点和线的关系求解,本文主要讲述一下两点确认直线,点到直线距离,两条直线的交点等问题的解决方法,并给出python程序.部分内容非原创,文中给出链接,需要者可以参考. 两点确定直线 表达式定义 ??空间直线的表达式有多种,比如一般式Ax+By+C=0.点斜式y-y0=k(x-x0).截距式x/a+y/b=1.两点式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等,它们具有彼此的约束条件,如下所示. ??由上可以看出来,一般

UVA 11178 Morley&#39;s Theorem(旋转+直线交点)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18543 [思路] 旋转+直线交点 第一个计算几何题,照着书上代码打的. [代码] 1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 6 7 struct Pt { 8 double x,y; 9 Pt(double x=0,d

POJ 1127 Jack Straws ( 求直线交点, 判断线段是否相交(含端点) )

题目:传送门 题意: 给你 n 条线段的两个端点, 然后有多次询问, 每次询问, 问你线段 x 和 线段 y 是否相交. 若线段 A 和线段 B 相交且线段 A 和线段 C 相交,那么线段 B 和线段 C 相交.     1 < n < 13 题解: 暴力求线段是否相交, 然后再跑个 Floyd 或者并查集都可以的. #include <iostream> #include <stdio.h> #include <string.h> #include <