#include <iostream>
#include <cmath>
#include <list>
#define eps 1e-8
using namespace std;
struct point
{
double x;
double y;
};
struct line
{
point a;
point b;
}arry[100005];
double xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y - p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int opposite_side(point p1,point p2,line l)
{
return xmult(l.a,p1,l.b)*xmult(l.a,p2,l.b)<-eps;
}
int intersect_ex(line u,line v)
{
return opposite_side(u.a,u.b,v)&&opposite_side(v.a,v.b,u);
}
//bool intersect_ex(line u,line v)
//{
// if(((max(u.a.x,u.b.x)>=min(v.a.x,v.b.x))&&(max(v.a.x,v.b.x)>=min(u.a.x,u.b.x))
// &&(max(u.a.y,u.b.y)>=min(v.a.y,v.b.y))&&(max(v.a.y,v.b.y)>=min
(u.a.y,u.b.y))&&
// (xmult(v.a,u.b,u.a)*xmult(u.b,v.b,u.a))>0&&(xmult(u.a,v.b,v.a)*xmult
(v.b,u.b,v.a))>0))
// return true;
// else
// return false;
//}
void output(list<int>n)
{
//* int temp=0;
// for(int i=n-1;i>=0;--i)
// {
// if(arry[i].flag==0)
// {
// temp=i;
// break;
// }
// }
// printf("Top sticks:");
// for(int i=0;i<temp;++i)
// {
// if(arry[i].flag==0)
// {
// printf(" %d,",i+1);
// }
// }
//printf(" %d.\n",temp+1)*/
printf("Top sticks:");
list<int>::iterator it;
for(it=n.begin();it!=n.end();++it)
{
if(it!=--n.end())
printf(" %d,",*it+1);
else
printf(" %d.\n",*it+1);
}
}
void input()
{
int n;
while(scanf("%d",&n))
{
if(n==0)break;
else
{
list<int>list1;
list<int>::iterator it;
int temp;
for(int i=0;i<n;++i)
{
list1.push_back(i);
scanf("%lf %lf %lf %lf",&arry[i].a.x,&arry[i].a.y,&arry
[i].b.x,&arry[i].b.y);
temp=0;
//for(int j=0;j<i;++j)
//{
// if(arry[j].flag==0)
// {
// temp=intersect_ex(arry[j],arry[i]);
// if(temp==1)
// {
// arry[j].flag=1;
// }
// }
//}
for(it = list1.begin();it!=list1.end();)
{
temp=intersect_ex(arry[*it],arry[i]);
if(temp)
{
//cout<<"temp=="<<temp<<" "<<*it<<endl;
it=list1.erase(it);
}
else
it++;
}
//for(it=list1.begin();it!=list1.end();++it)
// cout<<*it+1<<" ";
//cout<<endl;
}
output(list1);
}
}
}
int main()
{
input();
return 0;
}
题目大意:有很多木棍洒在地上,这样的话就有的木棍在上面,有的在下面了.木棍的厚度不计,就表示只
要木棍相交就算.问最后有多少跟木棍在最上面.
算法分析:计算几何,首先肯定用结构体了.双层结构体.判断木棍是否相交,用跨立和摸版的速度都一样
的.不过开始我暴力,过不了,数据量太大.后来用了STL里的list,不过在删除的地方遇到了一些困难搞了
好久才弄明白.remove()不行,erase()才成功,删除之后一定要注意下标的位置,在这个地方我WA了两次.