poj2653
来源:互联网 发布:淘宝有人工客服吗? 编辑:程序博客网 时间:2024/06/06 02:02
题意: 求有多少条线段没有与编号大于它的线段相交
解法: 数据随机,top stick不超过1000,可以直接暴力
知识点: 判断两个线段是否相交————向量叉积
代码:
#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#define N 200020#define eps 1e-7#define sosu doubleusing namespace std;int n;struct node{sosu x,y;};struct line{node a,b;}p[N];sosu cross(node o,node a,node b){sosu x1=a.x-o.x,x2=b.x-o.x;sosu y1=a.y-o.y,y2=b.y-o.y;return x1*y2-x2*y1;}bool check(line s,line t){sosu tmp=cross(s.a,s.b,t.a)*cross(s.a,s.b,t.b);sosu txp=cross(t.a,t.b,s.a)*cross(t.a,t.b,s.b);return tmp<-eps&&txp<-eps;}int ans[N],tot;int main(){while(~scanf("%d",&n)){tot=0;if(!n)break;for(int i=1;i<=n;i++)scanf("%lf%lf%lf%lf",&p[i].a.x,&p[i].a.y,&p[i].b.x,&p[i].b.y);for(int i=1;i<=n;i++){bool flag=0;for(int j=i+1;j<=n;j++)if(check(p[i],p[j])){flag=1;break;}if(!flag)ans[++tot]=i;}printf("Top sticks: ");for(int i=1;i<tot;i++)printf("%d, ",ans[i]);printf("%d.\n",ans[tot]);}}
阅读全文
0 0
- poj2653
- POJ2653
- POJ2653
- poj2653
- poj2653
- Poj2653
- poj2653
- poj2653解题报告
- poj2653 - Pick-up sticks
- 线段相交 poj2653
- POJ2653 Pick-up sticks
- POJ2653-Pick-up sticks
- poj2653-Pick-up sticks
- poj2653 Pick-up sticks
- POJ2653->判断线段相交
- poj2653 Pick-up sticks
- poj2653 Pick-up sticks
- poj2653 线段相交的判断
- unity解决快速运动物体碰撞检测穿透问题
- 51 nod 1275 连续子段的差异(单调队列)
- CSS布局
- scrapy
- 笔试_类和对象
- poj2653
- typedef的用法
- 迭代思想
- RecyclerView+OKhttp+item的条目加载
- 泛型/序列化
- Makefile简介及相关用法
- 台湾大学机器学习基石Lecture7
- 在线工具
- 线性无关