Pick-up sticks--poj2653(判断两线段是否相交)
http://poj.org/problem?id=2653
题目大意:有n根各种长度的棍 一同洒在地上 求在最上面的棍子有那几个
分析: 我刚开始想倒着遍历 因为n是100000 想着会超时吧 后来一看说 在上面的不会超过1000个 这就放心了 简单优化一下就过了
最后一个肯定是在最上面的 让后从他的下一个开始 每一个跟他相交的都是在他下面的 下一次就直接不循环他了
但是一直wa 彻底懵逼了
后来看了学长博客 他是正这循环 只要有跟他相交的就跳出 然后我就正这便利了一下 竟然过了 神奇ing !!!
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<math.h> #include<algorithm> #include<iostream> using namespace std; #define N 100050 const double ESP = 1e-8; #define INF 0xffffffff int vis[N]; struct Point { double x,y; Point (double x=0,double y=0):x(x),y(y) {} Point operator - (const Point &temp)const { return Point(x-temp.x,y-temp.y); } bool operator == (const Point &temp)const { return (fabs(temp.x-x)<ESP && fabs(temp.y-y)<ESP); } int operator * (const Point &temp)const { double t=(x*temp.y)-(y*temp.x); if(t>ESP) return 1; if(fabs(t)<ESP) return 0; return -1; } }; struct node { Point A,B; node(Point A=0,Point B=0):A(A),B(B) {} }; node a[N]; Point p[N]; int s[N]; int main() { int n; while(scanf("%d",&n),n) { int b=0; double x1,x2,y1,y2; for(int i=1; i<=n; i++) { scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2); p[b++]=Point(x1,y1); p[b++]=Point(x2,y2); a[i]=node(p[b-2],p[b-1]); } memset(vis,0,sizeof(vis)); memset(s,0,sizeof(s)); b=0; for(int i=1;i<=n;i++) { int flag=0; for(int j=i+1;j<=n;j++) { int k=abs((a[i].A-a[j].A)*(a[j].B-a[j].A)+(a[i].B-a[j].A)*(a[j].B-a[j].A)); int kk=abs((a[j].A-a[i].A)*(a[i].B-a[i].A)+(a[j].B-a[i].A)*(a[i].B-a[i].A)); if(kk==0 && k==0) { flag=1; break; } } if(flag==0) s[b++]=i; } printf("Top sticks: "); if(b==1) { printf("%d.\n",s[0]); continue; } for(int i=0; i<b-1; i++) { printf("%d, ",s[i]); } printf("%d.\n",s[b-1]); } return 0; }
标签:
计算几何
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· 几个自学项目的通病,别因为它们浪费了时间!
· 在外漂泊的这几年总结和感悟,展望未来
· 如何在 ASP.NET Core 中实现速率限制?
· Kubernetes 知识梳理及集群搭建
· 一文搞懂SaaS架构建设流程:业务战略设计、架构蓝图设计、领域系统架构设计、架构治理与实施