[POJ2318]TOYS(计算几何+二分)
来源:互联网 发布:前端程序员是干什么的 编辑:程序博客网 时间:2024/04/20 03:07
题目描述
传送门
题意:一些直线把一个矩形分割成了若干个部分。给出一些点问每一个部分里有多少个点
题解
叉积的性质:
可以二分出所在部分的右边界,是否在某一条直线的右边可以用叉积判断一下
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<ctime>using namespace std;#define N 10005const double eps=1e-9;int dcmp(double x){ if (x<=eps&&x>=-eps) return 0; return (x>0)?1:-1;}struct Vector{ double x,y; Vector(double X=0,double Y=0) { x=X,y=Y; }};typedef Vector Point;struct Line{ Point p; Vector v; Line(Point P=Point(0,0),Vector V=Vector(0,0)) { p=P,v=V; }};Vector operator - (Vector A,Vector B) {return Vector(A.x-B.x,A.y-B.y);}int n,m;double a,b,c,d,ui,li,x,y;Line l[N];int ans[N];void clear(){ memset(ans,0,sizeof(ans));}double Cross(Vector A,Vector B){ return A.x*B.y-A.y*B.x;}bool check(int mid,Point pt){ Point st=l[mid].p; Vector c=Vector(pt.x-st.x,pt.y-st.y); double t=Cross(l[mid].v,c); if (dcmp(t)>0) return true; else return false;}int find(Point pt){ int l=1,r=n+1,mid,ans=0; while (l<=r) { mid=(l+r)>>1; if (check(mid,pt)) ans=mid,r=mid-1; else l=mid+1; } return ans;}int main(){ while (~scanf("%d",&n)) { if (!n) break; clear(); scanf("%d",&m); scanf("%lf%lf%lf%lf",&a,&b,&c,&d); for (int i=1;i<=n;++i) { scanf("%lf%lf",&ui,&li); l[i]=Line(Point(li,d),Vector(ui-li,b-d)); } l[n+1]=Line(Point(c,d),Vector(0,b-d)); for (int i=1;i<=m;++i) { scanf("%lf%lf",&x,&y); int loc=find(Point(x,y)); ++ans[loc]; } for (int i=0;i<=n;++i) printf("%d: %d\n",i,ans[i+1]); puts(""); }}
0 0
- poj2318 TOYS(计算几何+叉积+二分)
- [POJ2318]TOYS(计算几何+二分)
- [POJ2318]TOYS(计算几何+二分)
- poj2318—TOYS(计算几何+二分)
- poj2318 TOYS(计算几何)
- POJ2318-toys(计算几何基础+二分)
- 【计算几何】 poj2318 TOYS
- poj2318 TOYS (计算几何)
- poj2318 Toys 【计算几何】
- POJ2318 TOYS(叉积,计算几何)
- POJ2318---TOYS (基础计算几何:叉积应用)
- poj2398+poj2318(计算几何+二分)
- poj2318 toy 计算几何+二分
- POJ2318(计算几何)
- poj2318——TOYS(计算几何+点与线段的位置)
- ACM-计算几何之Toys——poj2318
- poj2318 TOYS 【计算几何】【点和线的关系】
- POJ 2318 TOYS(计算几何)(二分)
- 关联函数的位置
- java 工具类
- Android AndroidManifest 清单文件以及权限详解
- 一个字总结我的2016
- java 上机实践四 类与对象
- [POJ2318]TOYS(计算几何+二分)
- ZXing 源码分析(简阅)
- 备忘录
- [POJ2398]Toy Storage(计算几何+二分)
- 查看android studio和apk文件签名
- 输入年月 返回当前月份的天数
- 60. Permutation Sequence
- 前端工程师面试指南
- win10 64位免安装版mysql-5.7.16-winx64安装步骤