1066 Treasure Hunt (判断线段相交)
来源:互联网 发布:淘宝试用要还回去吗 编辑:程序博客网 时间:2024/05/07 17:05
题意:100 * 100 的封闭房子,有一些贯穿整个房子的墙(从一条边到另一条边),把房子分成很多小室,也把墙分成很多段。宝物在一个小室中,可以在任意一段墙的问最少开几扇门,可以拿到宝物。
思路:(还是参考了题解。。自己想的思路很麻烦。。)
虽然题意说只能在墙中间开门,但实际上,开门的作用就是从一个小室通往另一个小室,那么对这样一步操作来说,门开在两个小室公共线段上哪个点是无所谓的。
于是,枚举四周的线段端点,与宝物连线,其与几条线相交开几扇门即可。
这里还是利用了 “任意点转化成端点问题” 的思想。。。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 50;typedef struct point { double x; double y;}point;typedef struct v { point start; point end;}v;double multi(point p1, point p2, point p0) //used for Across{ return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);}int Across(v v1, v v2) //segmentCross,use functions: multi(){ if(max(v1.start.x,v1.end.x) >= min(v2.start.x, v2.end.x) && max(v2.start.x,v2.end.x) >= min(v1.start.x, v1.end.x) && max(v1.start.y,v1.end.y) >= min(v2.start.y, v2.end.y) && multi(v2.start, v1.end, v1.start) * multi(v1.end, v2.end, v1.start) > 0 && multi(v1.start, v2.end, v2.start) * multi(v2.end, v1.end, v2.start) > 0) return 1; else return 0;}point wall[maxn][2];int main(){ int n; point pos; scanf("%d", &n); for(int i = 0; i < n; i++) { for(int j = 0; j < 2; j++) { scanf("%lf%lf", &wall[i][j].x, &wall[i][j].y); } } scanf("%lf%lf", &pos.x, &pos.y); v v1, v2; v1.start = pos; int ans = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < 2; j++) { v1.end = wall[i][j]; int cnt = 0; for(int p = 0; p < n; p++) { v2.start = wall[p][0]; v2.end = wall[p][1]; if(Across(v1, v2)) cnt++; }// printf("%lf %lf %d\n", v1.end.x, v1.end.y, cnt); if(i == 0 && j == 0) ans = cnt; else ans = min(cnt, ans); } } printf("Number of doors = %d\n", ans + 1); return 0;}
0 0
- poj 1066 Treasure Hunt(判断线段相交)
- 1066 Treasure Hunt (判断线段相交)
- POJ 1066 Treasure Hunt(线段相交判断)
- POJ 1066 Treasure Hunt(线段相交判断)
- poj 1066 Treasure Hunt(判断线段相交)
- poj 1066 Treasure Hunt(判断线段相交)
- POJ 1066 Treasure Hunt 判断两线段是否相交
- POJ 1066 Treasure Hunt (判断线段相交个数)
- poj 1066 Treasure Hunt(判断线段相交)
- POJ 1066 Treasure Hunt (线段相交)
- POJ 1066 Treasure Hunt --几何,线段相交
- POJ 1066 Treasure Hunt 【线段相交】
- Treasure Hunt(poj1066线段相交)
- POJ 1066 Treasure Hunt 判断线段相交(求交点个数)
- Poj 1066 Treasure Hunt && Nyoj 83 迷宫寻宝(二)判断线段相交
- POJ 1066 Treasure Hunt (线段与线段相交) -
- POJ 1066 Treasure Hunt(线段相交&&转换)
- POJ 1066 Treasure Hunt [线段相交]【计算几何】
- Top 10 Algorithms for Coding Interview
- Update还可以这样用
- Google gflags使用说明
- ListView 加载数据实现分页加载功能
- Android 中AsyncTask 的使用
- 1066 Treasure Hunt (判断线段相交)
- 中医:看脚十秒钟可知身体疾病
- Linux的管道命令竖线(|)
- 第六周作业(2)
- 解决判断某个字符串是否为json数据格式
- mongo查询方法汇总
- 自定义一个view,并实现最简单的手势识别功能(下)
- 目标检测的图像特征提取之HOG特征
- linux RedHat X64下oracle 客户端安装