POJ 1066 计算几何 线段相交
2013-01-10 22:40
393 查看
题意:
求从目标点走矩形框至少要穿越多少条边。
题解:
从矩形框上穿出等价于从直线与矩形框的顶点穿出。
矩形框四个角特判!
View Code
求从目标点走矩形框至少要穿越多少条边。
题解:
从矩形框上穿出等价于从直线与矩形框的顶点穿出。
矩形框四个角特判!
View Code
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #define N 10000 #define EPS 1e-8 using namespace std; struct LI { double x,y; }li [2],mi,co; int n,ans; inline void read() { for(int i=1;i<=n;i++) scanf("%lf%lf%lf%lf",&li[i][0].x,&li[i][0].y,&li[i][1].x,&li[i][1].y); scanf("%lf%lf",&mi.x,&mi.y); } inline double cross(const LI &o,const LI &a,const LI &b) { double fx=a.x-o.x,fy=a.y-o.y,px=b.x-o.x,py=b.y-o.y; return fx*py-fy*px; } inline int judge(const LI &a1,const LI &a2,const LI &b1,const LI &b2) { double fg1=cross(a1,a2,b1)*cross(a1,a2,b2); double fg2=cross(b1,b2,a1)*cross(b1,b2,a2); if(fg1<EPS&&fg2<EPS) return 1; return false; } inline int check(int x,int p) { int num=0; for(int i=1;i<=n;i++) num+=judge(mi,li[x][p],li[i][0],li[i][1]); return num; } inline void prp() { int num; num=1; co.x=co.y=0.0; for(int i=1;i<=n;i++) num+=judge(mi,co,li[i][0],li[i][1]); ans=min(ans,num); num=1; co.x=co.y=100.0; for(int i=1;i<=n;i++) num+=judge(mi,co,li[i][0],li[i][1]); ans=min(ans,num); num=1; co.x=0.0;co.y=100.0; for(int i=1;i<=n;i++) num+=judge(mi,co,li[i][0],li[i][1]); ans=min(ans,num); num=1; co.x=100.0;co.y=0.0; for(int i=1;i<=n;i++) num+=judge(mi,co,li[i][0],li[i][1]); ans=min(ans,num); } inline void go() { ans=0x3f3f3f3f; for(int i=1;i<=n;i++) for(int j=0;j<=1;j++) ans=min(ans,check(i,j)); prp(); printf("Number of doors = %d\n",ans); } int main() { while(scanf("%d",&n)!=EOF) read(),go(); return 0; }
相关文章推荐
- POJ1066---Treasure Hunt (计算几何基础:线段相交)
- POJ 1066 Treasure Hunt [线段相交]【计算几何】
- POJ 2653 Pick-up sticks(计算几何,判断线段相交)
- POJ 3449 Geometric Shapes --计算几何,线段相交
- POJ 3304 Segments [枚举+叉乘判断线段相交]【计算几何】
- POJ 1556 计算几何 判断线段相交
- POJ 2826 An Easy Problem?! (计算几何、线段相交、思维)
- POJ 3304 Segments <计算几何(直线与线段相交判断)>
- POJ 1127 —— 计算几何 && 线段相交
- POJ 2653 计算几何 判断线段相交
- POJ 3304 Segments(计算几何:直线与线段相交)
- POJ 1127Jack Straws (计算几何 + 线段相交)
- POJ 3304(计算几何初步——判断线段和直线相交,加上枚举)
- poj 3565(计算几何,线段相交)
- POJ 2318 TOYS 计算几何 线段相交
- POJ 1039——计算几何初步(判断线段与直线相交)
- POJ 3304 Segments(计算几何 判断直线与线段相交)
- POJ 3347 Kadj Squares 复杂的线段相交问题。这个题目是计算几何的扩大数据运算的典型应用 有时候扩大数据范围避免浮点误差,这个题就是应用
- POJ 3347 Kadj Squares (计算几何+线段相交)
- POJ 2653 Pick-up sticks [线段相交]【计算几何】