poj1066 线段相交简单应用(解题报告)
#include<stdio.h>
#include<math.h> const double eps=1e-8;
int n; struct Point
{
double x,y;
Point (){}
Point (double _x,double _y)
{
x=_x;
y=_y;
}
Point operator -(const Point &b)const {
return Point (x-b.x,y-b.y);
}
double operator *(const Point &b)const {
return x*b.x+y*b.y;
}
double operator ^(const Point &b)const{
return x*b.y-b.x*y;
}
}; struct Line
{
Point s,e;
Line (){}
Line (Point _s,Point _e)
{
s=_s;
e=_e;
}
}; Line line [40];
double xmult(Point p0,Point p1,Point p2)
{
return (p1-p0)^(p2-p0);
} bool seg_seg(Line l1,Line l2)//判断线段相交完全可以(不严格相交)
{
return xmult(l1.s,l2.s,l2.e)*xmult(l1.e,l2.s,l2.e)<=eps&&xmult(l2.s,l1.s,l1.e)*xmult(l2.e,l1.s,l1.e)<=eps;
} Point point;
int main()
{
double x1,x2,y1,y2; while(~scanf("%d",&n))
{for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
line[i]=Line(Point(x1,y1),Point(x2,y2));
}
line[n]=Line(Point(0,0),Point(0,100));
line[n+1]=Line(Point(100,0),Point(100,100));
scanf("%lf%lf",&x1,&y1);
point =Point(x1,y1);
int ans=0x3f3f3f,num;
for(int i=0;i<n+2;i++)
{
num=0;
for(int j=0;j<n;j++)
{
if(i==j)
continue;
if(seg_seg(Line(point,line[i].s),line[j])==true)
num++;
}
//printf("%d\n",num);
if(ans>num)
ans=num;
num=0;
for(int j=0;j<n;j++)
{
if(i==j)
continue;
if(seg_seg(Line(point,line[i].e),line[j])==true)
num++;
}
//printf("%d\n",num);
if(ans>num)
ans=num;
}
printf("Number of doors = %d\n",ans+1);
} }
题意:
在一个10X10的正方体中有着三十条以内的线段,线段的端点都在正方体的 边上,有一个宝物在正方体 的一个点上,求从正方体外到宝物处至少需要破坏几条直线来做门 ;
思路:
临界状态就是宝物与正方体四周的线段交点的连线与所有线段的相交的次数;
易错点:
1:枚举线段端点时,记得枚举正方形的四个顶点(还没理解为什么,---玄学)
2:枚举这条线段的端点时,不用判断这条线段是否与构造的线段相交。
poj1066 线段相交简单应用(解题报告)的更多相关文章
- 洛谷 P4148 简单题 解题报告
P4148 简单题 题意 维护单点加与矩形求和,强制在线 说明 \(n\le 500000,m\le 200000\),\(4000ms / 20MB\) kd-tree 复杂度我不懂 是一颗平衡树, ...
- DFS与BFS题解:[kaungbin]带你飞 简单搜索 解题报告
DFS and BFS 在解题前我们还是大致讲一下dfs与bfs的.(我感觉我不会bfs) 1.DFS dfs(深度优先算法) 正如其名,dfs是相当的深度,不走到最深处绝不回头的那种. 深度优先搜 ...
- poj 2653 线段相交裸题(解题报告)
#include<stdio.h> #include<math.h> const double eps=1e-8; int n; int cmp(double x) { if( ...
- 简单几何(线段相交) POJ 2653 Pick-up sticks
题目传送门 题意:就是小时候玩的一种游戏,问有多少线段盖在最上面 分析:简单线段相交,队列维护当前最上的线段 /******************************************** ...
- ACM: Just a Hook 解题报告 -线段树
E - Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- 简单几何(线段相交)+模拟 POJ 3449 Geometric Shapes
题目传送门 题意:给了若干个图形,问每个图形与哪些图形相交 分析:题目说白了就是处理出每个图形的线段,然后判断是否相交.但是读入输出巨恶心,就是个模拟题加上线段相交的判断,我第一次WA不知道输出要按字 ...
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- 简单几何(线段相交) POJ 1410 Intersection
题目传送门 题意:一个矩形和一条线段,问是否有相交 分析:考虑各种情况.坑点:给出的矩形的两个端点是无序的,还有线段完全在矩形内也算相交 /****************************** ...
- 简单几何(线段相交) POJ 1066 Treasure Hunt
题目传送门 题意:从四面任意点出发,有若干障碍门,问最少要轰掉几扇门才能到达终点 分析:枚举入口点,也就是线段的两个端点,然后选取与其他线段相交点数最少的 + 1就是答案.特判一下n == 0的时候 ...
随机推荐
- Linux下的screen和作业任务管理
一.screen 首先介绍下screen,screen是Linux下的一个任务容器,开启了之后就可以让任务在后台执行而不会被网络中断或者是终端退出而影响到. 在Linux中有一些耗时比较久的操作(例如 ...
- k8s之RBAC授权模式
导读 上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用 RBAC授权模式 基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授 ...
- 断言封装之key检查及kv实战示例
️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ 测试: 断言处理: demo_04.pyimport jsonjson_obj = {"access_token":&q ...
- 【Linux】tcpdump
tcpdump介绍 tcpdump 是一个运行在命令行下的抓包工具.它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包.tcpdump 适用于 大多数的类Unix系统操作系统 ...
- 【Oracle】10g rac如何开启归档和关闭归档
开启归档: 1.设置想设置的归档的位置,我们这里归档的位置为ASM磁盘组,磁盘组的名称为DATA alter system set log_archive_dest_1='location=+DATA ...
- libnum报错问题解决
之前在使用python libnum库时报错 附上报错内容 Traceback (most recent call last) : File" D:/python file/ctf/RSA共 ...
- Python入门之修改jupyter启动目录
[导读]在给大家分享知识的过程中,我们也会分享一些小技巧,能够帮助大家在学习过程中有更好的体验.之前我们给大家分享了anaconda安装教程以及jupyter notebook使用方法,今天我们为大家 ...
- django中的几种返回模版的方式
redirect方法-----(重定向) # 首先导入redirect方法, from django.shortcuts import redirect 在函数中写一个返回值 return redir ...
- k8s之共享存储概述以及演示
共享存储机制 k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷. 另外,k8s还开放了两个资源,分别是P ...
- 对象存储 COS 帮您轻松搞定跨域访问需求
背景 早期为了避免 CSRF(跨站请求伪造) 攻击,浏览器引入了 "同源策略" 机制.如果两个 URL 的协议,主机名(域名/IP),端口号一致,则视为这两个 URL " ...