zoukankan      html  css  js  c++  java
  • POJ 1066 Treasure Hunt(线段相交&&转换)

    Treasure Hunt

    大意:在一个矩形区域内,有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越只能在中点穿越。

    思路:需要巧妙的转换一下这个问题,因为从一个点到终点不可能“绕过”围墙,只能穿过去,所以门是否开在中点是无所谓的,只要求四周线段中点到终点的线段与墙的最少交点个数即可。更进一步,实际上,只需判断四周围墙的所有点与终点的连线与内墙的最少交点加一即可。

     1 struct Point{
     2     double x, y;
     3 } A, B, P[65], aim;
     4 struct Line{
     5     Point a, b;
     6 } L[35];
     7 
     8 int n;
     9 
    10 double xmult(Point p1, Point p2, Point p)
    11 {
    12     return (p1.x-p.x)*(p2.y-p.y)-(p2.x-p.x)*(p1.y-p.y);
    13 }
    14 
    15 bool Intersection(Line u, Line v)
    16 {
    17     return (max(u.a.x, u.b.x) >= min(v.a.x, v.b.x))
    18         && (max(v.a.x, v.b.x) >= min(u.a.x, u.b.x))
    19         && (max(u.a.y, u.b.y) >= min(v.a.y, v.b.y))
    20         && (max(v.a.y, v.b.y) >= min(u.a.y, u.b.y))
    21         && (xmult(u.a, v.a, u.b)*xmult(u.a, u.b, v.b) > eps)
    22         && (xmult(v.a, u.a, v.b)*xmult(v.a, v.b, u.b) > eps);
    23 }
    24 
    25 void Solve()
    26 {
    27    scanf("%d", &n);
    28    int t = 0;
    29    for(int i = 0; i < n; ++i)
    30    {
    31        scanf("%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y);
    32        P[t++] = L[i].a = A;
    33        P[t++] = L[i].b = B;
    34    }
    35    scanf("%lf%lf", &aim.x, &aim.y);
    36    int ans = INF;
    37    for(int i = 0; i < t; ++i)
    38    {
    39        int cnt = 0;
    40        Line p = (Line){aim, P[i]};
    41        for(int j = 0; j < n; ++j)
    42        {
    43            if(Intersection(p, L[j]))
    44            {
    45                cnt++;
    46            }
    47        }
    48        if(cnt < ans)
    49        {
    50            ans = cnt;
    51        }
    52    }
    53    printf("Number of doors = %d
    ", n?ans+1:1);
    54 }
    POJ 1066
  • 相关阅读:
    android 使用adb重新建立 eclipse和模拟器间的连接
    android ADB server didn't ACK
    Android getSystemService()
    Android隐藏标题栏
    Android 与WCF REST 服务联调
    Eclipase 无法启动,启动界面显示完版本号之后无响应
    调用WCF REST服务时,使用JSON
    org.apache.http.conn.HttpHostConnectException: Connection to refused
    SqlServer跨域查询
    ASP.net导出Excel的几种方式
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3803958.html
Copyright © 2011-2022 走看看