uva270

来源:互联网 发布:jeesz 源码下载 编辑:程序博客网 时间:2024/06/09 17:41

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

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

代碼:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[1000];int x[1000],y[1000];int len;void input() {    len=0;    while(gets(s)) {        if(!s[0]) break;        sscanf(s,"%d%d", &x[len],&y[len]);        len++;    }}bool isinline(int x1, int y1, int x2, int y2, int x3, int y3) {    return (x1-x2)*(y3-y2) == (x3-x2)*(y1-y2)?true:false;}int main() {    int n;    scanf("%d", &n);    getchar();    getchar();    while(n--) {        input();        if(len==1) {            printf("1\n");            if(n) printf("\n");            continue;        }        if(len==2) {            printf("2\n");            if(n) printf("\n");            continue;        }        int ans = 0;        int cnt = 0;        for(int i=0; i<len; i++) {            for(int j=i+1; j<len; j++) {                cnt = 2;                for(int k=j+1; k<len; k++) {                    if(isinline(x[i],y[i],x[j],y[j],x[k],y[k])) {                        cnt++;                    }                    if(cnt > ans) ans = cnt;                }            }        }        printf("%d\n", ans);        if(n) printf("\n");    }    return 0;}
0 0
原创粉丝点击