uva270 - Lining Up(暴力)

来源:互联网 发布:武汉蓝星软件 编辑:程序博客网 时间:2024/05/19 08:01

题目:uva270 - Lining Up


解题思路:对于每个点都计算一下,它与其他点的斜率,这样就可以判断与这个点在同一条直线的点。每个点都这样做,维护最大值就可以了。

                 注意斜率不存在的情况。

                 找相同斜率的时候用了multiset。


代码:

#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <set>using namespace std;const int N = 705;const double esp = 1e-9;int n;char str[N];double ki[N];int visit[N];multiset <double> K;struct NODE {double x, y;}node[N];double Max (const double a, const double b) { return a > b ? a: b; }double Fabs (const double a, const double b) { if (a > b)return a - b;return b - a;}int main () {int t;int cnt;int count;scanf ("%d%*c%*c", &t);while (t--) {n = 0;while (gets(str) != NULL && str[0] != '\0') {sscanf (str, "%lf%lf", &node[n].x, &node[n].y);n++;}cnt = 0;for (int i = 0; i < n; i++) {K.clear();count = 0;memset (visit, 0, sizeof (visit));for (int j = 0; j < n; j++) {if (i == j)continue;if (Fabs (node[i].x, node[j].x) <= esp) {count++;continue;}else             ki[j] = (node[i].y - node[j].y) / (node[i].x - node[j].x); K.insert (ki[j]);visit[j] = 1;           }for (int j = 0; j < n; j++) { if (visit[j]) { cnt = Max (cnt, K.count(ki[j]));// printf ("%d\n", K.count(ki[j])); }}cnt = Max (cnt, count);}printf ("%d\n", cnt + 1);if (t)printf ("\n");}return 0;}


0 0
原创粉丝点击