#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. 页面中iframe 弹层 和拖动效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 通过statCounter计算给定的RDD[Double]的统计信息的方法

    需求1:给定一个RDD[Double],进行计算,该RDD的统计信息(count,mean,stdev,max,min) 代码: def main(args: Array[String]): Unit ...

  3. shell脚本中:单引号和双引号的区别

    单引号和双引号的区别 前面我们还留下一个疑问,定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明: #!/bin ...

  4. php注册 及审核练习

    1.注册界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  5. SCOI 2014 new :未来展望

    后期计划(可能延续到noip) 后期计划这种东西..唉...经历了三周的停课生涯,我似乎已经找到了一种状态,就是我一直期盼的状态,然后为了不落泪退役,具体是这样的: 由于现在的学习任务不太紧张了,所以 ...

  6. bzoj1061题解

    [解题思路] 设类型i的志愿者,即第Si天~第Ti天工作的志愿者,共招募xi个,于是有不等式组Σxj≥Ai(Sj≤i≤Tj). 这样,题目就变成了求一组满足一次不等式组的xi,使ΣCixi最小,即标准 ...

  7. 模拟+算贡献——cf1195D

    比赛的时候没看到模数,用java大数在写,最后看到的时候已经慌了.. 把贡献算清楚就可以 下面是贡献的推导 有五位数 abcde * 10个 有两位数 fg * 3 个 那么这两种数组成的情况就是 a ...

  8. Delphi获取句柄

    Delphi获取句柄发布时间:2011-06-16转载文章请标明出处: http://code.01yun.com/asp0dm/asp0net0dm/20110616/55395.html查找另外一 ...

  9. HDU6331Problem M. Walking Plan

    传送门 分块floyd $f[i][j][k]$表示从i走k步到j的最短路 $g[i][j][k]$表示从i走k*100步到j的最短路 $h[i][j][k]$表示从i至少走k步到j的最短路 询问从x ...

  10. java基础编程题(2)

    1.给定一个二叉树,找出其最大深度. 注:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. /** * Definition for a binary tree node. * public ...