题目链接:点击打开链接

题目大意:一个正方形的墓葬内有n堵墙,每堵墙的两个顶点都在正方形的边界上,如今这些墙将墓葬切割成了非常多小空间,已知正方形内的一个点上存在宝藏,如今我们要在正方形的外面去得到宝藏,对于每一个小空间,我们能够炸开它的随意一条边的中点,如今给出每堵墙的两个节点的坐标和宝藏的坐标,问假设要得到宝藏,须要炸的墙数最少是多少。

枚举正方形边界上的点作为进入正方形的节点,由这个点向宝藏连出一条线段,这条线段和多少个墙相交,那么就须要炸坏多少个墙,找出一个最小的值。

原因,由于每堵墙的两个节点都在边界上,所以假设和墙相交,那么就一定要跨过这道墙,所以须要炸掉它。

一定要是规范相交,由于假设枚举的点假设是一堵墙的节点,那么这堵墙是不应该被计算的。

(应该是枚举出边界上的小空间的中点,为了省事,直接枚举全部的点。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std ;
#define eps 1e-8
#define zero(x) (((x) > 0 ? (x) : (-x)) < eps)
struct Point {
double x, y;
};
struct Line {
Point a, b;
}l[35], len[4];
int n ;
double xmult(Point p1, Point p2, Point p) {
return (p1.x-p.x)*(p2.y-p.y) - (p2.x-p.x)*(p1.y-p.y);
}
double dmult(Point p1, Point p2, Point p) {
return (p1.x-p.x)*(p2.x-p.x) + (p1.y-p.y)*(p2.y-p.y);
}
double distance(Point p1, Point p2) {
return sqrt((p1.x-p2.x)*(p1.x-p2.x)
+ (p1.y-p2.y)*(p1.y-p2.y));
}
int opposite_side(Point p1,Point p2,Line l) {
return xmult(l.a, p1, l.b)*xmult(l.a, p2, l.b) < -eps;
}
int intersect_ex(Line u, Line v) {
return opposite_side(u.a, u.b, v)
&& opposite_side(v.a, v.b, u);
}
int solve(Line len) {
int i, num = 0;
for(i = 0; i < n; i++) {
if( intersect_ex(l[i],len) ) num++;
}
return num;
}
int main() {
int i , ans ;
while( scanf("%d", &n) != EOF ) {
ans = n ;
for(i = 0; i < n; i++) {
scanf("%lf %lf %lf %lf", &l[i].a.x, &l[i].a.y, &l[i].b.x, &l[i].b.y);
}
scanf("%lf %lf", &len[0].a.x, &len[0].a.y) ;
len[1] = len[2] = len[3] = len[0];
len[0].b.y = len[3].b.x = 100 ;
len[1].b.y = len[2].b.x = 0 ;
for(i = 0; i <= 100; i++) {
len[0].b.x = len[3].b.y = len[1].b.x = len[2].b.y = i ;
ans = min(ans, solve(len[0]));
ans = min(ans, solve(len[1]));
ans = min(ans, solve(len[2]));
ans = min(ans, solve(len[3]));
}
ans++ ;
printf("Number of doors = %d\n", ans) ;
}
return 0 ;
}

poj1066--Treasure Hunt(规范相交)的更多相关文章

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

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

  2. poj1066 Treasure Hunt【计算几何】

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8192   Accepted: 3376 Des ...

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

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

  4. POJ1066 Treasure Hunt

    嘟嘟嘟 题意看题中的图就行:问你从给定的点出发最少需要穿过几条线段才能从正方形中出去(边界也算). 因为\(n\)很小,可以考虑比较暴力的做法.枚举在边界中的哪一个点离开的.也就是枚举四周的点\((x ...

  5. poj 1066 Treasure Hunt 线段相交

    题目链接 题目描述 一个正方形房间被分成若干个小室,宝藏在其中某一点.现可炸开任意一堵墙壁的中点位置.问至少要炸开多少堵墙才能从外面到达宝藏所在地. 思路 (很巧妙,没想到) 直接枚举墙壁与正方形外壁 ...

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

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

  7. zoj Treasure Hunt IV

    Treasure Hunt IV Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is exploring the wonderland ...

  8. HDU 1558 Segment set (并查集+线段非规范相交)

    题目链接 题意 : 如果两个线段相交就属于同一集合,查询某条线段所属集合有多少线段,输出. 思路 : 先判断与其他线段是否相交,然后合并. #include <cstdio> #inclu ...

  9. ZOJ3629 Treasure Hunt IV(找到规律,按公式)

    Treasure Hunt IV Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is exploring the wonderland ...

随机推荐

  1. 百度地图API 添加标签

    1.手动创建数据,实际项目则是接受GPS信息 /建立坐标点: // lng:经度 lat:纬度 var points = [ {"lng":112.58,"lat&quo ...

  2. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  3. NIO专栏学习

    http://blog.csdn.net/column/details/12993.html

  4. [NPM] Update published npm packages using np

    When we want to update our package we need to do a few things: pull latest from our git remote, bump ...

  5. 《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现

    ============================================================================================ <机器学 ...

  6. 一起talk C栗子吧(第九回:C语言实例--最大公约数)

    各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是素数的样例.这一回咱们说的样例是: ...

  7. 纯C++实现的HTTP请求封装(POST/GET)

    纯C++实现的HTTP请求(POST/GET),支持windows和linux, 进行简单的封装, 方便调用.实现如下: #include "HttpConnect.h" #ifd ...

  8. 跨域请求发送不了cookie问题: AJAX跨域请求JS配置和服务器端配置

    1.ajax是同步方式 $.ajax({ type: "post", url:url, async:false, data:datatosend, dataType:"j ...

  9. stm32单片机下载方式

    引用   编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2015/1012/article_22873.html 第一种 ISP下载: 这里类似51. boot1 ...

  10. chmod用数字来表示权限的方法

    前提:  mode权限设定字串.格式:[ugoa...][[+-=][rwxX]...][,...] 当中u表示拥有者(user).g表示与拥有者属于同一个群体(group),o表示其它以外的人(ot ...