【几何】2011 regional Beijing Site B——Hou Yi's secret——hdu 4082

来源:互联网 发布:cad绘图软件下载 编辑:程序博客网 时间:2024/05/22 09:04

注意重点&三点共线的情况。还有蛋疼的精度!

#define N 20#define eps 1e-8struct node {    int x,y;}p[N];struct edge {    double l[3];};edge tri[3*N*N];bool dd(double x,double y)  { return fabs( x - y ) < eps;}  double dis(node a, node b) {    return sqrt((a.x - b.x) * (a.x - b.x)*1.0 + (a.y - b.y) * (a.y - b.y)*1.0);}bool chk(node a, node b, node c) {    if ((b.y - a.y) * (c.x - a.x) == (c.y - a.y) * (b.x - a.x))return true;    return false;}bool cmp1(node a, node b) {    if (a.x == b.x)return a.y < b.y;    return a.x < b.x;}bool cmp2(node a, node b) {    return (a.x == b.x) && (a.y == b.y);}bool similar(double *a, double *b) {    if(dd(a[0]/b[0], a[1]/b[1]) && dd(a[1]/b[1], a[2]/b[2]))return true;    return false;}int gao(int n) {    int i,j,k;    sort(p,p+n,cmp1);    n = unique(p,p+n,cmp2) - p;    int cnt = 0;    bool tag = 0;    for (i = 0; i < n; i++) {        for (j = i + 1; j < n; j++) {            for (k = j + 1; k < n; k++) {                if (chk(p[i], p[j], p[k]))continue;                tag = 1;                tri[cnt].l[0] = dis(p[i], p[j]);                tri[cnt].l[1] = dis(p[i], p[k]);                tri[cnt].l[2] = dis(p[j], p[k]);                sort(tri[cnt].l, tri[cnt].l + 3);                cnt++;            }        }    }    if(!tag)return 0;    int maxm = 1;    for (i = 0; i < cnt; i++) {        int num = 1;        for (j = 0; j < cnt; j++) {            if(i == j)continue;            if( similar(tri[i].l, tri[j].l) )num++;        }        maxm = max (maxm, num);    }    return maxm;}int main() {    int n;    while( scanf("%d",&n) && n) {        int i;        for (i = 0; i < n; i++) scanf("%d%d",&p[i].x, &p[i].y);        int ans = gao(n);        printf("%d\n",ans);    }    return 0;}




















原创粉丝点击