【HDOJ】1466 计算直线的交点数

找了个规律。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 #define MAXN 21
 6 
 7 int buf[MAXN][150];
 8 int lens[MAXN];
 9 
10 int comp(const void *a, const void *b) {
11     return *(int *)a - *(int *)b;
12 }
13 
14 int main() {
15     int i, j, k, tmp, p, flg;
16     memset(lens, 0, sizeof(lens));
17     memset(buf, 0, sizeof(buf));
18     lens[0] = 1;
19     lens[1] = 1;
20     lens[2] = 2;
21     buf[2][1] = 1;
22 
23     for (i=3; i<MAXN; ++i) {
24         lens[i] = 1;
25         for (j=1; j<i; ++j) {
26             for (k=0; k<lens[j]; ++k) {
27                 tmp = (i-j)*j+buf[j][k];
28                 flg = 1;
29                 for (p=lens[i]-1; p>=0; --p) {
30                     if (buf[i][p] == tmp) {
31                         flg = 0;
32                         break;
33                     }
34                 }
35                 if (flg)
36                     buf[i][lens[i]++] = tmp;
37             }
38         }
39         qsort(buf[i], lens[i], sizeof(int), comp);
40     }
41 
42     while (scanf("%d", &k) != EOF) {
43         printf("%d", buf[k][0]);
44         for (i=1; i<lens[k]; ++i) {
45             if (buf[k][i] != buf[k][i-1])
46                 printf(" %d", buf[k][i]);
47         }
48         printf("\n");
49     }
50 
51     return 0;
52 }

 

posted on 2014-06-04 13:18  Bombe  阅读(223)  评论(0编辑  收藏  举报

导航