POJ 2653 Pick-up sticks(计算几何 求线段交点)
来源:互联网 发布:用手机发布淘宝宝贝 编辑:程序博客网 时间:2024/04/30 14:14
POJ 2653
题意:题意很简单,就是在地上按顺序撒一对木棒,看最后有多少是被压住的,输出没有被压住的木棒的序号。有点坑的就是没说清楚木棒怎么算压住,也不知道是不是规范相交。。。我就判断了一下包括端点重合跟部分相交的。
思路:一开始我想的是从后往前遍历,找到每一条边,看他是不是压到之前的边了,如果压到了,就把之前的变标记一下,最后统计没被标记过的,但是TLE了。。。就只能从前面开始找,遍历每一条边是否被后面的压过了,压过了就直接break,如果都没压到,存这条边,最后输出。
int n;struct point{ double x, y;} ;struct line{ point a, b;} L[100010];int Ans[100010];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);}///判三点共线int dots_inline(point p1,point p2,point p3){ return zero(xmult(p1,p2,p3));}///判两点在线段同侧,点在线段上返回0int same_side(point p1,point p2,line l){ return xmult(l.a,p1,l.b)*xmult(l.a,p2,l.b)>eps;}///判点是否在线段上,包括端点int dot_online_in(point p,line l){ return zero(xmult(p,l.a,l.b))&&(l.a.x-p.x)*(l.b.x-p.x)<eps&&(l.a.y-p.y)*(l.b.y-p.y)<eps;}///判两线段相交,包括端点和部分重合int intersect_in(line u,line v){ if (!dots_inline(u.a,u.b,v.a)||!dots_inline(u.a,u.b,v.b)) return !same_side(u.a,u.b,v)&&!same_side(v.a,v.b,u); return dot_online_in(u.a,v)||dot_online_in(u.b,v)||dot_online_in(v.a,u)||dot_online_in(v.b,u);}void Solve(){ while(~scanf("%d", &n) && n) { for(int 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); } int t = 0; for(int i = 0; i < n; ++i) { bool flag = true; for(int j = i+1; j < n; ++j) { if(intersect_in(L[i], L[j])) { flag = false; break; } } if(flag) { Ans[t++] = i+1; } } printf("Top sticks:"); for(int i = 0; i < t-1; ++i) { printf(" %d,", Ans[i]); } printf(" %d.\n", n); }}
0 0
- POJ 2653 Pick-up sticks(计算几何 求线段交点)
- POJ 2653 Pick-up sticks(计算几何 求交点)
- POJ 2653 Pick-up sticks 计算几何 线段相交
- POJ 2653 Pick-up sticks [线段相交]【计算几何】
- poj 2653 Pick-up sticks 计算几何
- poj 2653 Pick-up sticks 计算几何
- POJ 2653 Pick-up sticks <计算几何>
- POJ 2653 Pick-up sticks(计算几何,判断线段相交)
- POJ 2653 && HDU 1147 Pick-up sticks(计算几何)
- poj 2653 Pick-up sticks(计算几何)
- poj 2653 Pick-up sticks(几何线段相交判断)
- POJ 2653 Pick-up sticks【计算几何入门】
- [POJ2653]Pick-up sticks(计算几何)
- POJ 2653 Pick-up sticks --队列,几何
- poj Pick-up sticks 2653 (计算几何 直线相交的判断)
- 【poj 2653】 Pick-up sticks 线段相交
- poj 2653 Pick-up sticks 线段相交
- POJ-2653 Pick-up sticks(线段相交)
- Unity Mathf数学运算(C#)
- 共享内存 Shared Memory - Linux进程间通信
- webkit滚动条浅析
- ActionScript拖动元件
- 梦中的婚礼 c++--beep()
- POJ 2653 Pick-up sticks(计算几何 求线段交点)
- VC++/MFC中调用CHM帮助文档的方法
- Android复习之按钮button
- Android Permission Denied
- 丢失了文件localhost.localdomain.pid和mysql.sock,怎么办?
- Objective-C:属性
- Vim简明教程【CoolShell】
- cocos2d学习之路四(添加遥控杆)
- 如何“排外”处理多点触摸事件