zoukankan      html  css  js  c++  java
  • poj 2653 Pickup sticks 线段相交判断

    http://poj.org/problem?id=2653

    顺序的在地上扔一些细棒,求最后没有被压的细棒。
    我是用list容器存储,枚举过去,有被压的就删除,效率比较底,运行800多ms。
     
    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<iostream>
    #include<cmath>
    #include<list>
    using namespace std;
    struct point
    {
    double x,y;
    };
    struct line
    {
    point a,b;
    int num;
    };
    list<line> dlist;
    double multi(point p0,point p1,point p2)
    {
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
     
    bool is(point s1,point e1,point s2,point e2) //判断线段是否相交 
    {
    return (max(s1.x,e1.x)>=min(s2.x,e2.x))&&
      (max(s2.x,e2.x)>=min(s1.x,e1.x))&&
      (max(s1.y,e1.y)>=min(s2.y,e2.y))&&
      (max(s2.y,e2.y)>=min(s1.y,e1.y))&&
      (multi(s1,s2,e1)*multi(s1,e1,e2)>=0)&&
      (multi(s2,s1,e2)*multi(s2,e2,e1)>=0);
    }
    double dis(point p1,point p2)
    {
    return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    }
    int main()
    {
    int n,i;
    line in;
    list<line>::iterator iter1,iter2;
    while(scanf("%d",&n),n)
    {
    for(i=0;i<n;i++)
    {
    scanf("%lf%lf%lf%lf",&in.a.x,&in.a.y,&in.b.x,&in.b.y);
    in.num=i+1;
    dlist.push_back(in);
    }
    for(iter1=dlist.begin();iter1!=dlist.end();iter1++)
    for(iter2=dlist.begin();iter2!=iter1;)
    {
    if(is((*iter1).a,(*iter1).b,(*iter2).a,(*iter2).b))
    iter2=dlist.erase(iter2);
    else
    iter2++;
    }
    printf("Top sticks: %d",(*dlist.begin()).num);
    for(iter1=++dlist.begin();iter1!=dlist.end();iter1++)
    printf(", %d",(*iter1).num);
    printf(".\n");
    dlist.clear();
    }
    return 0;
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740225.html
Copyright © 2011-2022 走看看