题目链接:点击打开链接

题目大意:一个正方形的墓葬内有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. windows下使用cpanm进行模块安装

    windows下使用cpanm进行模块安装 要放假了,突然想整理一下手头上的软件,突然发现perl的安装模块这个功能不能用. 弄了一下,使得windows 下 perl 的 cpanm能用,避免成天为 ...

  2. hibernate hbm.xml配置映射

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. 【算法导论-36】并查集(Disjoint Set)具体解释

    WiKi Disjoint是"不相交"的意思.Disjoint Set高效地支持集合的合并(Union)和集合内元素的查找(Find)两种操作,所以Disjoint Set中文翻译 ...

  4. 强大的xUtils工具类整理

    xUtils简单介绍 xUtils 包括了非常多有用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,很多其它的事件注解支持且不受 ...

  5. UVA 11796 - Dog Distance 向量的应用

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  6. (转)windows 下 Java 及 Python 环境变量设置

    转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyes ...

  7. postman--下载及使用入门

    安装 本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,http ...

  8. BaaS简介

    SaaS(软件即服务:Software as a Service).IaaS(基础设施即服务:Infrastructure as a Service)和PaaS(平台即服务:Platform as a ...

  9. AE中Identify查询工具的实现

    原文 AE中Identify查询工具的实现 主要实现点击查询并闪烁显示,并把查询要素的信息通过DataGridView显示出来,主要用到的接口: IIdentity.IArray.IIdentifyO ...

  10. Launcher Activity在开机时重新启动两次解决的方法

    今天在看log的时候发现,Launcher activity会被onDestroy掉一次.然后再重新启动. 可能原因推測: 1.横竖屏切换 2.MCC MNC等Configuration改变引起的 M ...