码迷,mamicode.com
首页 > 其他好文 > 详细

G题 hdu 1466 计算直线的交点数

时间:2015-07-05 21:08:27      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466

计算直线的交点数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8799    Accepted Submission(s): 3973


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
 
题目大意:计算直线的交点数,注意考虑平行的问题,最后输出所有可能的交点个数。
 
解题思路:这里采用dp的方法。代码中有详解。
 
详见代码。
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 long long a[21][200]; //a[i][j]表示i条直线有j个交点,因为20条直线最多有C(20,2)=190条直线
 8                       //开200数组就够,下面循环也是一样。
 9 
10 int main ()
11 {
12     memset(a, 0, sizeof(0));
13     for (int i=1; i<=20; i++)
14     {
15         a[i][0] = 1;
16         for (int j=1; j<=i; j++)        //i条直线中有j条非平行线,则有i-j条非平行线。
17         {
18             for (int k=0; k<=190; k++)  //遍历0-190,若j条线有k个交点成立,则在加上i-j条平行线就有i条线(i-j)*j+k个交点成立
19             {
20                 if (a[j][k])
21                 a[i][(i-j)*j+k] = 1;
22             }
23         }
24     }
25     int n;
26     while (scanf ("%d",&n)==1)
27     {
28         printf ("0");
29         for (int i=1; i<=190; i++)
30         if (a[n][i])
31         printf (" %d",i);
32         printf ("\n");
33     }
34     return 0;
35 }

 

 
 

G题 hdu 1466 计算直线的交点数

标签:

原文地址:http://www.cnblogs.com/qq-star/p/4622997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!