uva 10902 Pick-up Sticks
来源:互联网 发布:淘宝哪家情侣装好看 编辑:程序博客网 时间:2024/05/23 11:25
题意:有n根木条,一根一根的往一个坐标系上丢(给出木条两点的坐标),问最后不被覆盖的木条有哪些,即丢的木条如果和前面丢的木条交叉的话,就会覆盖前面那根木条。
博主呢一开始直接在uva11343上改了输入,然后提交了,结果TLE。。。看了下题中范围,比较大,所以改用输一个删一堆
/*线段相交*/#include <iostream>#include <cstdio>#include <cstdlib>#include <vector>//#define T#define def 1e-6using namespace std;//点struct Point{ double x; double y;};//线struct Line{ Point p1; Point p2; int flag;};//判断点在pi-pj在线段的那一侧int direction(Point* pi,Point* pj,Point* pk){ Point p1,p2; p1.x = pk->x - pi->x; p1.y = pk->y - pi->y; p2.x = pj->x - pi->x; p2.y = pj->y - pi->y; double cross = p1.x*p2.y - p2.x*p1.y; if(cross >= def) return 1; else if(cross <= -def) return -1; else return 0;}//判断点是否在pi和pj为对角点的矩形里bool onSegment(Point* pi,Point* pj,Point* pk){ double minx,miny,maxx,maxy; if(pi->x > pj->x) { minx = pj->x; maxx = pi->x; } else { minx = pi->x; maxx = pj->x; } if(pi->y > pj->y) { miny = pj->y; maxy = pi->y; } else { miny = pi->y; maxy = pj->y; } return (minx <= pk->x)&&(maxx >= pk->x)&&(miny <=pk->y)&&(maxy >= pk->y);}//判断线段相交bool segmentIntersect(Point* p1,Point* p2,Point* p3,Point* p4){ int d1 = direction(p3,p4,p1); int d2 = direction(p3,p4,p2); int d3 = direction(p1,p2,p3); int d4 = direction(p1,p2,p4); if(d1*d2 < 0&&d3*d4 < 0) return true; if(!d1 && onSegment(p3,p4,p1)) return true; if(!d2 && onSegment(p3,p4,p2)) return true; if(!d3 && onSegment(p1,p2,p3)) return true; if(!d4 && onSegment(p1,p2,p4)) return true; return false;}vector<Line> LL;vector<Line>::iterator it;int main(){ //Point p1,p2,p3,p4;#ifdef T freopen("in.txt","r",stdin); freopen("out.txt","w",stdout);#endif // T int n,i,t; double a,b,c,d; Line L; while(scanf("%d",&n)&&n) { t=0; LL.clear(); for(i=1;i<=n;i++) { scanf("%lf %lf %lf %lf",&a,&b,&c,&d); L.p1.x = a;L.p1.y = b; L.p2.x = c;L.p2.y = d; L.flag = i; for(it = LL.begin();it != LL.end();) { if(segmentIntersect(&L.p1,&L.p2,&it->p1,&it->p2)) { LL.erase(it); } else it++; } LL.push_back(L); } printf("Top sticks:"); for(it = LL.begin();it != LL.end();it++) { if(t) printf(","); printf(" %d",it->flag); t=1; } printf(".\n"); } return 0;}
0 0
- UVa 10902 Pick-up Sticks
- uva 10902 Pick-up Sticks
- UVa 10902 Pick-up Sticks (线段与线段相交)
- Pick-up Sticks
- poj2653 - Pick-up sticks
- POJ Pick-up sticks
- Pick-up sticks
- Pick-up sticks
- POJ2653 Pick-up sticks
- POJ2653-Pick-up sticks
- poj2653-Pick-up sticks
- hdu1147:pick up sticks
- hdu1147(Pick-up sticks)
- poj2653 Pick-up sticks
- Pick-up sticks
- poj2653 Pick-up sticks
- Pick-up sticks
- Pick-up sticks
- Android 动画详解
- 三分查找
- bzoj 1283(线性规划)
- HDU 2586 How far away ? 离线LCA
- ListView常用技巧及优化
- uva 10902 Pick-up Sticks
- 虚拟机的网络连接
- 用protobuf定义消息及处理
- 美团面试总结
- Java中的反射机制复习
- 【BZOJ4597】【Shoi2016】随机序列 线段树
- redis简介
- 343. Integer Break
- [leetcode] 239. Sliding Window Maximum