uva270

来源:互联网 发布:办公室网络安装 编辑:程序博客网 时间:2024/06/08 19:15

题目的意思就是给出n个点的坐标,选出最多的点,在一条直线上。

就是连接任意两点得到一条线,然后遍历每个点,算出在这条线上点的数量,三层。。有点暴力。。


AC代码:


#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include<iostream>using namespace std;const int N = 710;int n;struct point{   int x,y;}p[N];int line(int i ,int j ,int k) {   return (p[j].y-p[i].y)*(p[k].x-p[i].x) - (p[j].x-p[i].x)*(p[k].y-p[i].y);}void solve() {   int m = 2;   for(int i = 0; i < n; i++)      for(int j = i + 1 ; j < n ; j++)  {         int res = 2;         for(int k = j + 1; k < n; k++)            if(k != i && k != j) {               if(!line(i,j,k))                  res++;            }         if(res > m) m = res;      }   printf("%d\n",m);}int main() {   int T;   scanf("%d",&T);   getchar();   getchar();   while(T--) {      char str[100 + 10];      n = 0;      while(1) { if (!gets(str)) break;         if(strcmp(str,"") == 0) break;         sscanf(str,"%d%d",&p[n].x , &p[n].y);         n++;      }      solve();      if(T) printf("\n");   }   return 0;}


0 0
原创粉丝点击