zoukankan      html  css  js  c++  java
  • POJ 1127 Jack Straws(计算几何)

    题目链接

    抄的模版,居然1Y了。就是简单的线段相交+并查集。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cmath>
     6 using namespace std;
     7 #define eps 1e-8
     8 #define zero(x) (((x) > 0?(x):(-x))<eps)
     9 
    10 struct point
    11 {
    12     double x,y;
    13 };
    14 struct line
    15 {
    16     point a,b;
    17 };
    18 int o[100];
    19 line p[101];
    20 int xmult(point p1,point p2,point p0)
    21 {
    22     return (p1.x-p0.x)*(p2.y-p0.y) - (p1.y-p0.y)*(p2.x-p0.x);
    23 }
    24 int dot_online_in(point p,line l)
    25 {
    26     return zero(xmult(p,l.a,l.b))&&(l.a.x-p.x)*(l.b.x-p.x) < eps&&(l.a.y-p.y)*(l.b.y-p.y) < eps;
    27 }
    28 int dots_online(point p1,point p2,point p3)
    29 {
    30     return zero(xmult(p1,p2,p3));
    31 }
    32 int same_side(point p1,point p2,line l)
    33 {
    34     return xmult(l.a,p1,l.b)*xmult(l.a,p2,l.b) > eps;
    35 }
    36 int interset_in(line u,line v)
    37 {
    38     if(!dots_online(u.a,u.b,v.a)||!dots_online(u.a,u.b,v.b))
    39     return !same_side(u.a,u.b,v)&&!same_side(v.a,v.b,u);
    40 
    41     return dot_online_in(u.a,v)||dot_online_in(u.b,v)||dot_online_in(v.a,u)||dot_online_in(v.b,u);
    42 }
    43 int find(int x)
    44 {
    45     while(x != o[x])
    46     x = o[x];
    47     return x;
    48 }
    49 void merge(int x,int y)
    50 {
    51     x = find(x);
    52     y = find(y);
    53     if(x != y)
    54     o[x] = y;
    55 }
    56 int main()
    57 {
    58     int n,i,j,x,y;
    59 
    60     while(scanf("%d",&n)!=EOF)
    61     {
    62         if(n == 0) break;
    63         for(i = 1;i <= n;i ++)
    64         {
    65             o[i] = i;
    66             scanf("%lf%lf%lf%lf",&p[i].a.x,&p[i].a.y,&p[i].b.x,&p[i].b.y);
    67         }
    68         for(i = 1;i <= n;i ++)
    69         {
    70             for(j = i+1;j <= n;j ++)
    71             {
    72                 if(interset_in(p[i],p[j]))
    73                 merge(i,j);
    74             }
    75         }
    76         for(;;)
    77         {
    78             scanf("%d%d",&x,&y);
    79             if(x == 0&&y == 0) break;
    80             if(find(x) == find(y))
    81             printf("CONNECTED
    ");
    82             else
    83             printf("NOT CONNECTED
    ");
    84         }
    85     }
    86 
    87     return 0;
    88 }
  • 相关阅读:
    商城问题
    web基础重难点
    业务流程
    主流框架面试题
    数据库:索引-引擎-优化
    【jquey代码】基于选中的checkbox 删除对应的一行数据
    javascript中获取json对象的value,拼接到页面上
    【json对象和json格式的字符串】
    【idea中创建springMVC项目的2个坑】不识别@Autowired 以及 Mapper.xml的配置
    【eclipse和idea】创建spring项目时的一处不同
  • 原文地址:https://www.cnblogs.com/naix-x/p/3363765.html
Copyright © 2011-2022 走看看