博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1066 Treasure Hunt
阅读量:4974 次
发布时间:2019-06-12

本文共 2115 字,大约阅读时间需要 7 分钟。

枚举边上相邻点的中点,和终点连线,计算其和其他线段的交点。

值得回味的地方是kuailezhish帮我想出的排序的方案。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))#define MAX(a,b) ((a)>(b)?(a):(b))#define MIN(a,b) ((a)<(b)?(a):(b))#define INF 0x3f3f3f3fusing namespace std;struct point { double x, y; void setPoint(double xx, double yy) { x = xx; y = yy; }};struct line { point s, e;};int n;line num[109];point ed, a[509];int acnt;double eps = 1e-8;int getval(point a) { int ret = 0; if(a.x <= eps) { ret = a.y; } else if(fabs(a.x - 100) <= eps) { ret = 101 + a.y; } else if(a.y <= eps) { ret = 202 + a.x; } else { ret = 303 + a.x; } return ret;}bool cmp1(point a, point b) { int ta = getval(a); int tb = getval(b); return ta < tb;}bool dy(double a, double b) { return fabs(a - b) < eps;}double mp(point a, point b, point c) { return ((b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y));}int iscross(line a, line b) { if(mp(a.s, a.e, b.s) * mp(a.s, a.e, b.e) < -eps && mp(b.s, b.e, a.s) * mp(b.s, b.e, a.e) < -eps) { return 1; } return 0;}int cntline(line t) { int ret = 1; for(int i = 0; i < n; i++) { ret += iscross(t, num[i]); } return ret;}int main() {#ifndef ONLINE_JUDGE freopen("F:/ACMData.txt","r",stdin);#endif scanf("%d", &n); acnt = 0; for(int i = 0; i < n; i++) { scanf("%lf%lf%lf%lf", &num[i].s.x, &num[i].s.y, &num[i].e.x, &num[i].e.y); a[acnt++] = num[i].s; a[acnt++] = num[i].e; } scanf("%lf%lf", &ed.x, &ed.y); a[acnt++].setPoint(0, 0); a[acnt++].setPoint(0, 100); a[acnt++].setPoint(100, 0); a[acnt++].setPoint(100, 100); sort(a, a + acnt, cmp1); int ret = INF; for(int i = 0; i < acnt - 1; i++) { if(dy(a[i].x, a[i + 1].x) && dy(a[i].y, a[i + 1].y)) { continue; } if(dy(a[i].x, a[i + 1].x) || dy(a[i].y, a[i + 1].y)) { line p; p.s = ed; p.e.setPoint(a[i].x / 2 + a[i + 1].x / 2, a[i].y / 2 + a[i + 1].y / 2); int tmp = cntline(p); ret = MIN(ret, tmp); } } printf("Number of doors = %d\n", ret); return 0;}

 

 

转载于:https://www.cnblogs.com/soenlit/p/3204307.html

你可能感兴趣的文章
Sublime 快捷键
查看>>
GNU make manual 翻译(二十六)
查看>>
poj1436
查看>>
iOS 电话在后台运行时,我的启动图片被压缩
查看>>
MySQL修复打不开的视图定义
查看>>
PHP max_execution_time 超时
查看>>
NTBootAutofix:一款极为优秀的自动修复XP/VISTA/WIN7系统引导的工具
查看>>
js获取对象、数组的实际长度,元素实际个数
查看>>
asp.net 网站监控方案
查看>>
jquery 日期选择的方案
查看>>
Java数据类型和方法参数
查看>>
初学者可能不知道的vue技巧
查看>>
USACO 4.1.1 麦香牛块 Beef McNuggets
查看>>
linux每日命令(39):lsof命令
查看>>
HRESULT:0x80070057 (E_INVALIDARG) 异常
查看>>
查询数据库中指定数据库所有表中是否包含指定字段
查看>>
Cool Websites
查看>>
怎样取消不能改动(仅仅读打开)的word文件的password
查看>>
58 子类继承父类的方法重写
查看>>
61 package
查看>>