POJ 2653 Pick-up sticks
来源:互联网 发布:最优化算法pdf 编辑:程序博客网 时间:2024/05/20 00:16
链接点击:POJ 2653 Pick-up sticks
一道依靠纯粹暴力就可以过得简单题。
#include<stdio.h>#include<string.h>#include<math.h>#define eps 1e-6const int MAXN=100002;bool vis[MAXN];typedef struct{ double x,y;}Point;Point p1[MAXN],p2[MAXN];int dblcmp(double x){ if(fabs(x)<eps) return 0; return x>0?1:-1;}double det(double x1,double y1,double x2,double y2){ //求叉积 return x1*y2-x2*y1;}double cross(Point a,Point b,Point c){ return det(a.x-c.x,a.y-c.y,b.x-c.x,b.y-c.y);}bool segcross(Point a,Point b,Point c,Point d){ int d1,d2,d3,d4; d1=dblcmp(cross(a,b,c)); d2=dblcmp(cross(a,b,d)); d3=dblcmp(cross(c,d,a)); d4=dblcmp(cross(c,d,b)); if((d1^d2)==-2&&(d3^d4)==-2) return true; return false;}int main(){ int n,i,j; while(scanf("%d",&n),n) { memset(vis,true,sizeof(vis)); for(i=1;i<=n;i++) scanf("%lf%lf%lf%lf",&p1[i].x,&p1[i].y,&p2[i].x,&p2[i].y); for(i=1;i<=n;i++) for(j=n;j>=i+1;j--)//只能倒着遍历,否则会超时,因为后面压前面的概率大,所以从后开始找更加省时。 if(segcross(p1[i],p2[i],p1[j],p2[j]))//判断线段是否相交 { vis[i]=false; break; } printf("Top sticks: "); for(i=1;i<n;i++) if(vis[i]) printf("%d, ",i); printf("%d.\n",n); } return 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 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 Pick-up sticks
- POJ 2653 Pick-up sticks
- 插入排序
- cf283d
- 数据库设计5步骤
- windows与linux下sigar的系统依赖文件配置
- WIN2003下IIS(WEB服务器)的负载均衡
- POJ 2653 Pick-up sticks
- Qt的Tab选项卡
- windows下发布Qt程序
- 关于字符数组异或换位后数据类型的注意
- web在resin中发布
- 转:TCP三次握手和四次挥手详细图解
- 两线段相交的判断(跨立实验法)
- Fragment 生命周期
- 触发器