#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std; const double esp = 1e-;
const double inf = 1e20;
const double pi = acos(-1.0);
const int maxp = ; int sgn(double x){
if(fabs(x) < esp)return ;
if(x < )return -;
else return ;
}
inline double sqr(double x){return x*x;} struct Point{
double x,y;
Point(){}
Point(double _x,double _y):x(_x),y(_y){}
void input(){scanf("%lf%lf",&x,&y);}
void output(){printf("%.2lf %.2lf\n",x,y);}
bool operator==(Point b)const {
return sgn(x-b.x)== && sgn(y-b.y)==;
}
bool operator < (Point b)const {//判左下
if( sgn(x-b.x)== ) //横坐标相等
return sgn(y-b.y)<;
return x<b.x;
}
Point operator - (const Point &b)const {
return Point(x-b.x,y-b.y);
}
double operator ^(const Point &b)const {
return x*b.y-y*b.x;
}
double operator *(const Point &b)const {
return x*b.x+y*b.y;
}
double len(){
return hypot(x,y);
}
double len2(){
return x*x+y*y;
}
double distance(Point p){
return hypot(x-p.x,y-p.y);
}
Point operator +(const Point &b)const {
return Point(x+b.x,y+b.y);
}
Point operator *(const double &k)const {
return Point(x*k,y*k);
}
Point operator /(const double &k)const {
return Point(x/k,y/k);
}
double rad(Point a,Point b){
Point p=*this;
return fabs(atan2( fabs((a-p)^(b-p)),(a-p)*(b-p) ));
}
Point trunc(double r){
double l=len();
if(!sgn(l))return *this;
r/=l;
return Point(x*r,y*r);
}
Point rotleft(){
return Point(-y,x);
}
Point rotright(){
return Point(y,-x);
}
Point rotate(Point p,double angle){
Point v=(*this)-p;
double c=cos(angle),s=sin(angle);
return Point(p.x+v.x*c-v.y*s, p.y+v.x*s+v.y*c);
}
};
struct Line{
Point s,e;
Line(){}
Line(Point s,Point e):s(s),e(e){}
bool operator ==(Line v){
return (s==v.s) && (e==v.e);
}
Line(Point p,double angle){
s=p;
if(sgn(angle-pi/)==)
e=s+Point(,);
else e=s+Point(,tan(angle));
}
Line(double a,double b,double c){
if(sgn(a)==){
s=Point(,-c/b);
e=Point(,-c/b);
}
else if(sgn(b)==){
s=Point(-c/a,);
e=Point(-c/a,);
}
else {
s=Point(,-c/b);
e=Point(,(-c-a)/b);
}
}
void input(){
s.input();
e.input();
}
void adjust(){
if(e<s)swap(e,s);
}
double length(){
return s.distance(e);
}
double angle(){
double k=atan2(e.y-s.y,e.x-s.x);
if(sgn(k)<)k+=pi;
if(sgn(k-pi)==) k-=pi;
return k;
}
int relation(Point p){
int c=sgn((p-s)^(e-s));
if(c<)return ;
else if(c>)return ;
else return ;
}
bool pointonseg(Point p){
return sgn((p-s)^(e-s))== && sgn((p-s)*(p-e))<=;
}
bool parallel(Line v){
return sgn((e-s)^(v.e-v.s))==;
}
int segcrossseg(Line v){
int d1=sgn((e-s)^(v.s-s));
int d2=sgn((e-s)^(v.e-s));
int d3=sgn((v.e-v.s)^(s-v.s));
int d4=sgn((v.e-v.s)^(e-v.s));
if( (d1^d2)==- && (d3^d4)==-) return ;
return (d1== && sgn((v.s-s)*(v.s-e))<=) ||
(d2== && sgn((v.e-s)*(v.e-e))<=) ||
(d3== && sgn((s-v.s)^(s-v.e))<=) ||
(d4== && sgn((e-v.s)^(e-v.e))<=);
}
int linecrossseg(Line v){
int d1=sgn((e-s)^(v.s-s));
int d2=sgn((e-s)^(v.e-s));
if(d1^d2==-)return ;
return d1== || d2==;
}
int linecrossline(Line v){
if((*this).parallel(v))
return v.relation(s)==;
return ;
}
Point crosspoint(Line v){
double a1=(v.e-v.s)^(s-v.s);//面积
double a2=(v.e-v.s)^(e-v.s);
return Point((s.x*a2-e.x*a1)/(a2-a1),
(s.y*a2-e.y*a1)/(a2-a1));
}
double dispointtoline(Point p){
return fabs((p-s)^(e-s))/length();
}
double dispointtoseg(Point p){
if(sgn((p-s)*(e-s))< || sgn((p-e)*(s-e))<)
return min(p.distance(s),p.distance(e));
return dispointtoline(p);
}
double dissegtoseg(Line v){
return min(min(dispointtoseg(v.s),dispointtoseg(v.e)),
min(v.dispointtoline(s),v.dispointtoline(e)));
}
Point lineprog(Point p){//s+vt
return s+( ((e-s)*((e-s)*(p-s)))/(e-s).len2() );
}
Point symmetrypoint(Point p){
Point q=lineprog(p);
return Point(*q.x-p.x,*q.y-p.y);
}
}; const int maxn = ;
Line line[maxn];
int ans[maxn]; int main(){
int n,m;
double x1,y1,x2,y2;
bool first=;
while(scanf("%d",&n)== && n){
if(first)first=;
else puts("");
scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
double Ui,Li;
for(int i=;i<n;i++){
scanf("%lf%lf",&Ui,&Li);
line[i]=Line(Point(Li,y2),Point(Ui,y1));
}
line[n]=Line(Point(x2,y2),Point(x2,y1));
/*for(int i=0;i<=n;i++)
line[i].adjust();*/ double x,y;
Point p;
memset(ans,,sizeof ans); while(m--){
scanf("%lf%lf",&x,&y);
p=Point(x,y);
int l=,r=n,tmp=,mid;
while(l<=r){
mid=l+r>>;
if(line[mid].relation(p)==){//p在直线的左边
tmp=mid;r=mid-;
}
else l=mid+;
}
ans[tmp]++;
}
for(int i=;i<=n;i++)
printf("%d: %d\n",i,ans[i]);
}
return ;
}

计算几何——点线关系(叉积)poj2318的更多相关文章

  1. hdu 4643 GSM 计算几何 - 点线关系

    /* hdu 4643 GSM 计算几何 - 点线关系 N个城市,任意两个城市之间都有沿他们之间直线的铁路 M个基站 问从城市A到城市B需要切换几次基站 当从基站a切换到基站b时,切换的地点就是ab的 ...

  2. poj 2398 Toy Storage(计算几何 点线关系)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4588   Accepted: 2718 Descr ...

  3. 美年健康股票成交量和K线关系

    看下美年健康的股票,这次主要是研究下成交量和K线的关系,以最后5天为例子,股票下跌成交量降低,说明抛压很小,在最后3天,价格突破的时候,成交量是平时的两倍,说明有机构买入, 业绩部分还可以,全民健身是 ...

  4. POJ 2318 TOYS(点与直线的关系 叉积&&二分)

    题目链接 题意: 给定一个矩形,n个线段将矩形分成n+1个区间,m个点,问这些点的分布. 题解: 思路就是叉积加二分,利用叉积判断点与直线的距离,二分搜索区间. 代码: 最近整理了STL的一些模板,发 ...

  5. 湖南程序设计竞赛赛题总结 XTU 1237 Magic Triangle(计算几何)

    这个月月初我们一行三人去湖南参加了ccpc湖南程序设计比赛,虽然路途遥远,六月的湘潭天气燥热,不过在一起的努力之下,拿到了一块铜牌,也算没空手而归啦.不过通过比赛,还是发现我们的差距,希望这几个月自己 ...

  6. iOS:练习题中如何用技术去实现一个连线题

    一.介绍 本人做的app涉及的是教育行业,所以关于练习题的开发肯定是家常便饭.例如,选择题.填空题.连线题.判断题等,每一种题型都需要技术去实现,没啥多大难度,这里呢,就给出实现连线题的核心代码吧.过 ...

  7. bzoj2395 [Balkan 2011]Timeismoney(最小乘积生成树+计算几何)

    题意 每条边有两个权值\(c,t\),请求出一颗生成树,使得\(\sum c\times \sum t\)最小 题解 为什么生成树会和计算几何扯上关系-- 对于每棵树,设\(x=c,y=t\),我们可 ...

  8. Verilog代码和FPGA硬件的映射关系(一)

    代码和硬件之间的映射关系是一个很奇妙的过程,也展现出人类的智慧.单片机内部的硬件结构都是固定的,无法改变,我们通过代码操作着寄存器的读写,来执行各种复杂的任务.FPGA的硬件结构并不像单片机一样是固定 ...

  9. 牛人的ACM经验 (转)

    一:知识点     数据结构:       1,单,双链表及循环链表       2,树的表示与存储,二叉树(概念,遍历)二叉树的                    应用(二叉排序树,判定树,博弈 ...

随机推荐

  1. Linux 进程间通信 共享内存

    1.特点: 1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.如管道当在内核空间创建以后,用户空间需要内存  拷贝,需要拷贝数据,所以效率低. 2)为了在多个进 ...

  2. python pathlib模块详解

    python pathlib模块详解    

  3. lsm和lkm模块

    使用LSM Hook框架进行内核安全审计.元数据捕获,安全人员只需要按照既定的调用规范编写LKM模块,并加载进Linux内核,而不需要对system call lookup表进行任何修改 https: ...

  4. java动态代理--proxy&cglib

    大纲 代理 proxy cglib 小结 一.代理 为什么要用代理?其实就是希望不修改对象的情况下,增强对象. 静态代理: 静态代理模式,需要代理类和目标类实现同一接口,代理类的方法调用目标类的方法, ...

  5. Delphi ADOQuery的属性 locktype、CursorLocation 、Filter、CursorType、CancelBatch 和 UpdateBatch

    以下数据,部分来自网络的收集,部分为自己测试后的原创整理,希望对你有帮助,更新会注明日期. 1.locktype  指定用户打开数据集时对数据集的锁定级别: ltUnspecified   未指定锁定 ...

  6. bzoj1005题解

    [解题思路] 引理:Prufer编码 定义:不断删除树中度数为1的最小序号的点,并输出与其相连的节点的序号,直至树中只有两个节点,所得输出序列即为Prufer编码. 性质:任意一棵n节点的树都可以用长 ...

  7. storm集群的安装

    storm图解 storm的基本概念 Topologies:拓扑,也俗称一个任务 Spoults:拓扑的消息源 Bolts:拓扑的处理逻辑单元 tuple:消息元组,在Spoults和Bolts传递数 ...

  8. web音乐播放器

    今天闲暇时间,花了2小时,写了个简单音乐播放器.欢迎大家来吐糟 先看下界面截图 大体实现:播放,停止,上一曲,下一曲,循环播放功能. 知识点:1.html 中audio 2.css 位置fixed 其 ...

  9. 秦曾昌人工智能课程---7、决策树集成学习Tree Ensembles

    秦曾昌人工智能课程---7.决策树集成学习Tree Ensembles 一.总结 一句话总结: 其实机器模型减少variance的比较好的方式就是 多个模型取平均值 1.CART是什么? classi ...

  10. sizeof,真正终结版GCC与VC

    在VC6.0中sizeof结果是16.我电脑上装了个linux虚拟机,在虚拟机上GCC中结果是12, 恩不同编译器默认对齐数值不一样. VC 默认为 8 gcc 默认为 4 有个编译参数控制对齐. # ...