题目链接

题意:一个矩形被分成了n + 1块,然后给出m个点,求每个点会落在哪一块中,输出每块的点的个数

就是判断 点与直线的位置,点在直线的逆时针方向叉积 < 0,点在直线的顺时针方向叉积 > 0

 // 可以选择二分查找
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int Max = + ;
int num[Max];
//int ux[Max], dx[Max];
struct Point
{
LL ux, dx;
};
LL Cross(LL x1, LL y1, LL x2, LL y2)
{
return x1 * y2 - y1 * x2;
}
int main()
{
int n, m, x1, x2, y1, y2;
while (scanf("%d", &n) != EOF && n)
{
scanf("%d%d%d%d%d", &m, &x1, &y1, &x2, &y2);
for(int i = ; i <= n; i++)
scanf("%d%d", &ux[i], &dx[i]);
ux[n + ] = x2; // 把最后边界也算进去
dx[n + ] = x2;
memset(num, , sizeof(num));
int x, y, l, r, mid;
for (int i = ; i <= m; i++)
{
scanf("%d%d", &x, &y);
if (!(x >= x1 && x <= x2 && y >= y2 && y <= y1)) // 不在矩形内
continue;
l = , r = n + ;
while (l < r)
{
mid = (l + r) / ;
if (Cross(x - dx[mid], y - y2, ux[mid] - dx[mid], y1 - y2) > ) // 如果 大于 0 说明 点在直线 右侧,所以改变左区间
l = mid + ;
else
r = mid; // r始终是满足条件的
}
num[r - ]++;
/*
for (int j = 1; j <= n + 1; j++)
{
if ( Cross(x - dx[j], y - y2, ux[j] - dx[j], y1 - y2) <= 0)
{
num[j - 1]++;
break;
}
}
*/
}
for (int i = ; i <= n; i++)
printf("%d: %d\n", i, num[i]);
printf("\n");
}
return ;
}

POJ2318TOYS(叉积判断点与直线位置)的更多相关文章

  1. POJ 2318 叉积判断点与直线位置

    TOYS   Description Calculate the number of toys that land in each bin of a partitioned toy box. Mom ...

  2. POJ2318 TOYS(叉积判断点与直线的关系+二分)

    Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad have a prob ...

  3. poj2318(叉积判断点在直线左右+二分)

    题目链接:https://vjudge.net/problem/POJ-2318 题意:有n条线将矩形分成n+1块,m个点落在矩形内,求每一块点的个数. 思路: 最近开始肝计算几何,之前的几何题基本处 ...

  4. POJ 2398 - Toy Storage 点与直线位置关系

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5439   Accepted: 3234 Descr ...

  5. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  6. POJ 1269 Intersecting Lines (判断直线位置关系)

    题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...

  7. POJ 1269 Intersecting Lines(判断两直线位置关系)

    题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...

  8. 简单几何(直线位置) POJ 1269 Intersecting Lines

    题目传送门 题意:判断两条直线的位置关系,共线或平行或相交 分析:先判断平行还是共线,最后就是相交.平行用叉积判断向量,共线的话也用叉积判断点,相交求交点 /********************* ...

  9. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

随机推荐

  1. 必须要会的技能(一) 如何实现设计时Binding

    今天我们来分享一个主题:DesignTime Binding设计时绑定. 这一项技术可以使用在所有包括WPF及其衍生出来的技术上,比如Sliverlight,当然也包括UWP 先来说明一下设计时Bin ...

  2. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

  3. Codeforces Round #369(div 2)

    A:=w= B:=w= C:题意:有一排树,有的树已经上色,有的树没有上色,只能给没上色的树上色,一共m种颜色,不同的树上不同的色花费不同,涂完色后,连续颜色的树成为一段.对于给定的段数k,求出最小花 ...

  4. matlab如何建立一个空矩阵,然后往里面赋值

    x=:; y=[]; :length(x) % y=[y;x(i)];%把每一个x都放到Y里,成为一列 y=[y,x(i)];%把每一个x都放到Y里,成为一行 end

  5. RecyclerView的使用(一)

    RecyclerView是Android5.0推出的用来替代ListView和GridView的控件. 使用RecyclerView也很简单,不过需要先引入support-v7中的RecyclerVi ...

  6. 【CodeVS 3160】最长公共子串

    http://codevs.cn/problem/3160/ 看了好久的后缀自动机_(:з」∠)_ 对A串建立SAM,用B串去匹配A串SAM,如果在当前节点走不下去,就跳到当前节点的parent(类似 ...

  7. 【UOJ #17】【NOIP 2014】飞扬的小鸟

    http://uoj.ac/problem/17 dp,注意细节. #include<cstdio> #include<cstring> #include<algorit ...

  8. C++中的重载隐藏覆盖&&JAVA中的重载覆盖&&多态

    class 类继承默认是private, struct 默认继承是public C++中的隐藏: 只要派生类中出现和基类一样的函数名,基类中的函数就会被派生类中的函数给隐藏(如果派生类和基类中的函数名 ...

  9. Entity Framework Code First (一)Conventions

    Entity Framework 简言之就是一个ORM(Object-Relational Mapper)框架. Code First 使得你能够通过C#的类来描述一个模型,模型如何被发现/检测就是通 ...

  10. httpclient提示Cookie rejected: violates RFC 2109: domain must start with a dot

    使用httpclient时发生如下告警信息: WARN - HttpMethodBase.processResponseHeaders(1505) | Cookie rejected: "$ ...