题目来源:http://poj.org/problem?id=2318

题目内容:给定一个矩形盒子(左上和右下端点的坐标),再给定n条线段,将盒子分为n+1份,之后给定m个点的坐标,对于盒子的每一段,输出内部包含的点的个数(边界上的算做盒子内)。

解法分析:核心内容有判断点与线段的关系(其实根本用不上判断点是否在多边形内的算法),二分查找。先读进数据在简单的二分查找即可。

算法如下:

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct Point
{
int x, y;
}; struct Line
{
Point a, b;
} line[]; int ans[]; //答案数组 int Multi(Point p1, Point p2, Point p0) //p2相对p1左转为正 ,叉积
{
return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
} void BSearch(Point a, int n)
{
int l, r, mid; l = ; r = n-;
while (l < r)
{
mid = (l + r) >> ; // /2
if (Multi(a, line[mid].a, line[mid].b) > ) //.a为上边的节点 ,若a节点在盒子中
l = mid + ; //左区间推进
else
r = mid; //右区间推进
}
if (Multi(a, line[l].a, line[l].b) < ) //判断边界
ans[l]++;
else
ans[l+]++;
} int main()
{
int n, m, x1, y1, x2, y2;
int t1, t2;
Point a;
while (scanf ("%d", &n) && n) //处理 0 结尾 数据 的 好技巧
{
scanf ("%d%d%d%d%d", &m, &x1, &y1, &x2, &y2);
for (int i = ; i < n; i++)
{
scanf ("%d%d", &t1, &t2);
line[i].a.x = t1; //.a为上边的节点
line[i].a.y = y1;
line[i].b.x = t2;
line[i].b.y = y2;
}
memset(ans, , sizeof (ans));
for (int i = ; i < m; i++)
{
scanf ("%d%d", &a.x, &a.y);
BSearch(a, n);
}
for (int i = ; i <= n; i++)
printf ("%d: %d\n", i, ans[i]);
printf("\n");
}
return ;
}

POJ 2318的更多相关文章

  1. 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage

    题目传送门 题意:POJ 2318 有一个长方形,用线段划分若干区域,给若干个点,问每个区域点的分布情况 分析:点和线段的位置判断可以用叉积判断.给的线段是排好序的,但是点是无序的,所以可以用二分优化 ...

  2. 向量的叉积 POJ 2318 TOYS & POJ 2398 Toy Storage

    POJ 2318: 题目大意:给定一个盒子的左上角和右下角坐标,然后给n条线,可以将盒子分成n+1个部分,再给m个点,问每个区域内有多少各点 这个题用到关键的一步就是向量的叉积,假设一个点m在 由ab ...

  3. poj 2318 叉积+二分

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13262   Accepted: 6412 Description ...

  4. POJ 2318/2398 叉积性质

    2318 2398 题意:给出n条线将一块区域分成n+1块空间,再给出m个点,询问这些点在哪个空间里. 思路:由于只要求相对位置关系,而对具体位置不关心,那么易使用叉积性质得到相对位置关系(左侧/右侧 ...

  5. poj 2318 TOYS &amp; poj 2398 Toy Storage (叉积)

    链接:poj 2318 题意:有一个矩形盒子,盒子里有一些木块线段.而且这些线段坐标是依照顺序给出的. 有n条线段,把盒子分层了n+1个区域,然后有m个玩具.这m个玩具的坐标是已知的,问最后每一个区域 ...

  6. POJ 2318 TOYS(叉积+二分)

    题目传送门:POJ 2318 TOYS Description Calculate the number of toys that land in each bin of a partitioned ...

  7. poj 2318 TOYS (二分+叉积)

    http://poj.org/problem?id=2318 TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 101 ...

  8. 二分+叉积判断方向 poj 2318 2398

    // 题意:问你每个区域有多少个点 // 思路:数据小可以直接暴力 // 也可以二分区间 #include <cstdio> #include <cstring> #inclu ...

  9. (POJ 2318)TOYS 向量叉积

    题目链接:http://poj.org/problem?id=2318 #include<stdio.h> #include<cstdlib> #include<cstr ...

随机推荐

  1. C# 图片的裁剪,两个图片合成一个图片

    图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary>         /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png  新图1_ne ...

  2. js中setTimeout()时间参数设置为0的探讨

    起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); co ...

  3. .NET截取指定长度汉字超出部分以"..."代替

    /// <summary> /// 将指定字符串按指定长度进行剪切, /// </summary> /// <param name= "oldStr " ...

  4. 说一说windows原生docker及windows Server Container , Hyper Container 之间的关系(学习总结)

    前一段时间学习netcore的时候解除到了docker,感觉真是不错的技术.百度了不少教程.因为我用windows就下载安装了一下试试.但是没有安装成功,才发现 需要安装virtualbox虚拟机,与 ...

  5. Spring(4)

    Spring的Bean的配置形式 1.基于XML的形式(无需讲解) 2.基于注解的形式(需要引入AOP的jar包,此jar包实现了AOP的注解) 当在Spring配置文件中引入类扫描注解命名空间并且指 ...

  6. POJ 1061

    题意: 两只青蛙在同一条纬度上,它们各自朝西跳,问它们要跳多少步才能碰面(必须同时到达同一点). 分析: 假设它们跳了t步才相遇,青蛙a初始坐标为x,青蛙b初始坐标为y,则跳了t步相遇后a的坐标为 x ...

  7. 清除Linux OS 缓存

    1.查看内存使用情况 [root@ip---- tpch_2_17_0]# free -m total used free shared buffers cached Mem: -/+ buffers ...

  8. java 抓取网页图片

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  9. J2EE、J2SE、J2ME是什么意思?

    本文介绍Java的三大块:J2EE.J2SE和J2ME.J2SE就是Java2的标准版,主要用于桌面应用软件的编程:J2ME主要应用于嵌入是系统开发,如手机和PDA的编程:J2EE是Java2的企业版 ...

  10. 作业七:团队项目——Alpha版本冲刺阶段007

    今日进展:完善游戏主体代码. 今日安排:让游戏能运行起来.