hdu 1147 Pick-up sticks
来源:互联网 发布:js被劫持 编辑:程序博客网 时间:2024/06/06 00:16
题意是在一个平面上按顺序摆上放一些棍子,求最后哪些棍子在最上面(此题只需考虑规范相交的情况)
用一个链表储存每放一根棍子后摆在最上面的棍子,每放一根棍子就判断一下是否跟前面的棍子规相交,
若相交,则将前面的那条棍子删除
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<list>using namespace std;#define precision 1e-8#define MAX 1000000struct point {double x;double y;};struct seg{point a;point b;int cnt;};//p1a与p2a的叉积double cross(point p1,point p2,point a){return (p1.x-a.x)*(p2.y-a.y)-(p1.y-a.y)*(p2.x-a.x);}//判断m是否等于0int dblcmp(double m){if(fabs(m)<precision)return 0;else if(m<0)return -1;return 1;}int betweencmp(point p1,point p2,point a){double s=(p1.x-a.x)*(p2.x-a.x)+(p1.y-a.y)*(p2.y-a.y); //ap1与ap2的点积return dblcmp(s);}int segcross(point a,point b,point c,point d){double s1,s2,s3,s4;int d1,d2,d3,d4;d1=dblcmp(s1=cross(b,c,a));d2=dblcmp(s2=cross(b,d,a));d3=dblcmp(s3=cross(d,a,c));d4=dblcmp(s4=cross(d,b,c));//判断规范相交,并计算出交点if(d1*d2<0 &&d3*d4<0){return 1;}//判断非规范相交if( ( d1==0 && betweencmp(a,b,c)<=0 ) ||( d2==0 && betweencmp(a,b,d)<=0 ) ||( d3==0 && betweencmp(c,d,a)<=0 ) ||( d4==0 && betweencmp(c,d,b)<=0 ))return true;return false;}int main(){freopen("test.txt","r",stdin);list<seg>stick;int n;int i,k;int len;list<seg>::iterator p;seg v;while(scanf("%d",&n)!=EOF &&n!=0){scanf("%lf %lf %lf %lf", &v.a.x , &v.a.y , &v.b.x , &v.b.y);v.cnt=1;stick.push_back(v);for(i=2;i<=n;i++){scanf("%lf %lf %lf %lf", &v.a.x , &v.a.y , &v.b.x , &v.b.y);v.cnt=i;stick.push_back(v);len=stick.size();p=stick.begin();for(k=1;k<len;k++){if( segcross((*p).a,(*p).b,v.a,v.b) ){p=stick.erase(p);}elsep++;}}printf("Top sticks: ");p=stick.begin();len=stick.size();for(i=1;i<len;i++){printf("%d, ",(*p).cnt);p++;}printf("%d.\n",(*p).cnt);stick.clear();}return 0;}
- hdu 1147 Pick-up sticks
- HDU-1147-Pick-up sticks
- HDU 1147 Pick-up sticks
- hdu 1147 Pick-up sticks
- hdu 2497 Pick up sticks
- HDU 1147 Pick-up sticks(计算几何 判断直线相交)
- hdu 1147 Pick-up sticks 向量积求线段相交
- HDU 1147 Pick-up sticks(简单的线段相交)
- HDU 1147 Pick-up sticks(线段是否相交)
- hdu 1147 Pick-up sticks(线段相交+枚举)
- POJ 2653 && HDU 1147 Pick-up sticks(计算几何)
- hdu 1147 Pick-up sticks(求是否有交点)
- hdu acm 1147 Pick-up sticks(判断线段相交)
- hdu-1147 Pick-up sticks(判断线段相交)
- HDU 1147 Pick-up sticks(线段相交)
- hdu 1147 pick up sticks 几何问题线段相交
- hdu Pick-up sticks 线段相交问题
- hdoj 1147 Pick-up sticks 计算几何
- cocos2d-x细节之不能设置触摸优先级隐晦bug
- [转载]cygwin sshd服务启动不了的解决方案
- Android系统设计中的设计模式分析之二
- DACL, NULL or not NULL
- 七夕怀念
- hdu 1147 Pick-up sticks
- POJ 1062
- ubuntu下无线网被禁用,联网图标无法显示
- 一个简单的DNS客户端demo
- java反射
- Myeclipse10+TomCat7配置
- 念,心随君浅舞天涯
- 企业使用多大的光纤宽带合适呢-光纤接入
- session的存储方式