题目链接: http://poj.org/problem?id=1066

--------------------------------------------------------------------------------------------------------

这题刚看后可能会去纠结如何建图后进行最短路

不过这样做不仅代码会复杂许多 还有可能出现些不好判断的部分

不过再多想一下我们可以发现如下性质

如果起点和终点位于某条障碍线段的两侧 那么这条线段有且仅有一次被穿过

所以只要统计起点和终点连线穿过的线段条数即可得到答案

又由于保证输入都是整数 所以我们只用在边界上枚举所有相邻整点的中点作为起点即可

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
struct node
{
double x, y;
}a[], b, c;
double cross(const node &aa, const node &bb, const node &cc)
{
return (bb.x - aa.x) * (cc.y - aa.y) - (bb.y - aa.y) * (cc.x - aa.x);
}
bool check(const node &aa, const node &bb, const node &cc, const node &dd)
{
return cross(aa, bb, cc) * cross(aa, bb, dd) < ;
}
int n, ans = , cnt;
int main()
{
scanf("%d", &n);
for(int i = ; i <= (n << ); ++i)
scanf("%lf%lf", &a[i].x ,&a[i].y);
scanf("%lf%lf", &b.x , &b.y);
for(int i = ; i < ; ++i)
{
cnt = ;
c.x = 0.5 + i;
c.y = ;
for(int j = ; j < (n << ); j += )
if(check(a[j], a[j + ], b, c))
++cnt;
ans = min(ans, cnt);
cnt = ;
c.x = 0.5 + i;
c.y = ;
for(int j = ; j < (n << ); j += )
if(check(a[j], a[j + ], b, c))
++cnt;
ans = min(ans, cnt);
cnt = ;
c.y = 0.5 + i;
c.x = ;
for(int j = ; j < (n << ); j += )
if(check(a[j], a[j + ], b, c))
++cnt;
ans = min(ans, cnt);
cnt = ;
c.y = 0.5 + i;
c.x = ;
for(int j = ; j < (n << ); j += )
if(check(a[j], a[j + ], b, c))
++cnt;
ans = min(ans, cnt);
}
printf("Number of doors = %d\n", ans + );
return ;
}

POJ 1066 Treasure Hunt [想法题]的更多相关文章

  1. poj 1066 Treasure Hunt (Geometry + BFS)

    1066 -- Treasure Hunt 题意是,在一个金字塔中有一个宝藏,金字塔里面有很多的墙,要穿过墙壁才能进入到宝藏所在的地方.可是因为某些原因,只能在两个墙壁的交点连线的中点穿过墙壁.问最少 ...

  2. POJ 1066 Treasure Hunt(线段相交判断)

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4797   Accepted: 1998 Des ...

  3. POJ 1066 Treasure Hunt(相交线段&amp;&amp;更改)

    Treasure Hunt 大意:在一个矩形区域内.有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越仅仅能在中点穿越. 思路:须要巧妙的转换一 ...

  4. POJ 1066 - Treasure Hunt - [枚举+判断线段相交]

    题目链接:http://poj.org/problem?id=1066 Time Limit: 1000MS Memory Limit: 10000K Description Archeologist ...

  5. poj 1066 Treasure Hunt

    http://poj.org/problem?id=1066 #include <cstdio> #include <cstring> #include <cmath&g ...

  6. POJ 1066 Treasure Hunt(计算几何)

    题意:给出一个100*100的正方形区域,通过若干连接区域边界的线段将正方形区域分割为多个不规则多边形小区域,然后给出宝藏位置,要求从区域外部开辟到宝藏所在位置的一条路径,使得开辟路径所需要打通的墙壁 ...

  7. [poj] 1066 Treasure Hunt || 判断直线相交

    原题 在金字塔内有一个宝藏p(x,y),现在要取出这个宝藏. 在金字塔内有许多墙,为了进入宝藏所在的房间必须把墙炸开,但是炸墙只能炸每个房间墙的中点. 求将宝藏运出城堡所需要的最小炸墙数. 判断点和直 ...

  8. POJ 1066 Treasure Hunt (线段相交)

    题意:给你一个100*100的正方形,再给你n条线(墙),保证线段一定在正方形内且端点在正方形边界(外墙),最后给你一个正方形内的点(保证不再墙上) 告诉你墙之间(包括外墙)围成了一些小房间,在小房间 ...

  9. POJ 1066 Treasure Hunt【线段相交】

    思路:枚举四边墙的门的中点,与终点连成一条线段,判断与其相交的线段的个数.最小的加一即为答案. 我是傻逼,一个数组越界调了两个小时. #include<stdio.h> #include& ...

随机推荐

  1. IQueryable在LINQ中

    IQueryable接口定义如下: // 摘要: // 提供对未指定数据类型的特定数据源的查询进行计算的功能. public interface IQueryable : IEnumerable { ...

  2. OuterXml和InnerXml

    例如 <bkk> <rp fe="few" > <fe>fff</fe> </rp> </bkk> 对于fe ...

  3. 在使用spring中的ContextConfiguration、test注解时出现的错误

    错误: 在使用测试注解时出现ContextConfiguration注解和test注解无法正常导包使用的编译异常,如图: 解决办法: 将pom.xml文件中以下依赖管理 中的<scope> ...

  4. vmware 中标麒麟系统安装VM tools

    打开虚拟机系统,选择菜单虚拟机->安装VMware TOOLs,下载后找到文件. 我的文件名称是 VMwareTools-10.2.5-8068393.tar.gz, 在终端里输入:tar xv ...

  5. js如何实现上拉加载更多...

    我们在项目中经常使用到下拉加载更多,之前要么是底部写加载按钮,要么是引入插件.今天终于有时间手写一个了,之前感觉挺麻烦,明白原理后,其实很简单... scrollTop:滚动视窗的高度距离window ...

  6. Gradle Could not find method leftShift() for arguments

    task hello << { println 'Hello world!' } 其中 << 在gradle 在5.1 之后废弃了 可以查看gradle 版本号 gradle ...

  7. Java ——数字图像处理(Java Graphics及其API简介)

    1.创建一个Graphics对象BufferedImage bi = new BufferedImage(120,120, BufferedImage.TYPE_INT_ARGB);Graphics2 ...

  8. 使用absolute实现的后台布局,包括小图标定位,菜单弹出等完整版

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. slot-scope 插槽 的使用 ——'<template slot-scope="page">'

    slot-scope="page"slot-scope 是一个插槽,拿外面的数据,可以获取当前一行的数据page.row.pageId 拿到当前行数据的pageId注意:slot- ...

  10. vue.js(10)--案例--列表增加与删除

    品牌管理案例 (1)bootstrip快速布局 <div class="app"> <div class="panel panel-primary&qu ...