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

分析: 计算区域中有t 个点的 区域有多少个。

#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <iostream>
#include <vector>
#include<map>
using namespace std;
typedef long long ll;
const int N =6000;
const double PI = 3.1415927;struct Point{int x,y;Point(){}Point(int x,int y):x(x),y(y){} // 构造函数,方便代码编写Point(const Point & p):x(p.x),y(p.y){}Point operator +(Point p){return Point(x+p.x,y+p.y);}Point operator-(Point p){return Point(x-p.x,y-p.y);}Point operator*(double d){return Point(x*d,y*d);}int operator*(Point p){  // 内积 点乘return x*p.x+ y*p.y;}int operator^(Point p){//  外积 叉乘return x*p.y-y*p.x;}friend ostream& operator<<(ostream& os,const Point& p ){os<<p.x<<" "<<p.y<<endl;return os;}friend istream& operator>>(istream& is, Point& p) {// Point 不能是常量,是变量is>>p.x>>p.y;return is;}
};
Point up[N];
Point low[N];
int num[N];
bool operator <(Point p1, Point p2)
{return p1.x<p2.x;}
int n;
map<int ,int >mp;
map<int ,int >::iterator it;
void bin_search(Point p)   // 二分法,寻找点所在的区域,用叉乘,注意结束条件是 left+1== right
{int left=0,mid;int right = n+1;while(left<=right){mid=(left+right) /2;int t=(up[mid]-low[mid])^(p-low[mid]);if( t >0  )right=mid;else if( t <0 )left=mid;if(left+1 == right ){num[left]++;break;}}
}
int main() {int m;int a,b;Point p;while(cin>>n && n){cin>>m;cin>>up[0]>>low[n+1];low[0].x=up[0].x;up[n+1].x=low[n+1].x;for(int i=0;i<=n+1;i++){up[i].y=up[0].y;low[i].y=low[n+1].y;num[i]=0;}for(int i=1;i<=n;i++){cin>>a>>b;up[i].x=a;low[i].x=b;}sort(up+1,up+n+1);sort(low+1,low+n+1);mp.clear();for(int i=1;i<=m;i++){cin>>p;bin_search(p);}for(int i=0;i<=n;i++)mp[num[i] ] ++;printf("Box\n");for(it=mp.begin(); it != mp.end(); it++){if(it->first > 0)printf("%d: %d\n",it->first,it->second);}}return 0;
}

转载于:https://www.cnblogs.com/zn505119020/p/3623818.html

计算区域中有t 个点的 区域有多少个+计算几何 + 叉乘+sort+ 二分 + map poj 2398 Toy Storage...相关推荐

  1. 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。

    /*已知有如下 string 对象:  9.39:  string line1 = "We were her pride of 10 she  named us:";   stri ...

  2. 实验:非骨干区域通过虚链路穿越非骨干区域连接骨干区域实现互联互通

    文章目录 实验对象 实验环境 实验原理 实验目的 实验步骤 小结: 实验对象 四台路由器,两台主机 实验环境 GNS3,CRT 实验原理 虚链路 实验目的 通过配置命令使非骨干区域通过虚链路穿越非骨干 ...

  3. CSS简单动画---自用展开区域动画(箭头旋转,区域拉伸)

    箭头旋转效果: 代码: <template> <view> <view class="arrow" :style="{transform:i ...

  4. 如何设置html打印区域大小,excel如何设置打印区域

    EXCEL打印区域很大,怎么设置打印才能全部打出来 1.首先点击想要打印的excel文档,在工具栏中点击"打印预览" 2.点击页边距选项 3.然后设置打印区域:点击文件--打印选定 ...

  5. 简单快捷计算本月第一天星期几、本月有多少天、上一个月的最后一天是几号

    今天偶然在vue2/nodejs视频中看到一个计算"本月第一天星期几.本月有多少天.上一个月的最后一天是几号" 最简便最快捷的方法. 如果自己写,就很容易要判断闰年问题,那就非常复 ...

  6. 寻找区域中有几个点 叉乘+二分 poj 2318

    题目来源:http://poj.org/problem?id=2318 一个 矩阵 被分成多个 区域, 然后输入 多个点, 输出 每个区域点的 个数. 当寻找点 落在某个区域时, 用二分法. #inc ...

  7. mfc强制局部区域刷新_简述JVM内存区域划分

    我们在Java编程时少不了程序优化,而程序优化的前提是知道JVM的内存是如何划分的,那么我们今天来大体了解下. 在看JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Ja ...

  8. python 区域和检索_304. 二维区域和检索(Python)

    题目 难度:★★★☆☆ 类型:二维数组 方法:动态规划 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 示例: 给 ...

  9. QGraphicsItem设置绘图区域和鼠标响应以及碰撞检测区域,并实现碰撞检测

    QGraphicsItem中有两个方法,分别用来控制QGraphicsItem的绘图区域和碰撞检测区域: 1.[pure virtual] QRectF QGraphicsItem::bounding ...

最新文章

  1. Apache配置虚拟主机,全部指向一个目录
  2. MySQL 笔记1 -- 安装MySQL及Navicat
  3. 项目管理、测试管理、代码bug 管理
  4. 排队问题解题思路_1120各数的认识解决问题
  5. 【Python】异常捕获
  6. 10分钟读懂人工智能、机器学习到底有什么关系
  7. Axios实现异步通信
  8. HTML多选mysql,html多选下拉框 | 学步园
  9. php 页面开启错误提示,php开启与关闭错误提示
  10. python随机选取0到100间的奇数_python random模块(随机数)详解
  11. 微信授权获取基本信息java_Java微信网页授权授权获取用户基本信息
  12. 加载不同库,同名函数引起的BUG一例
  13. java jbpm工作流_[JAVA] Jbpm工作流引擎原理及Jbpm复杂流程实现视频课程
  14. 三层神经网络实现手写数字图像分类
  15. rdkitnlp | smiles数据扩增与smiles标准化
  16. nvidia_tao实现lpr训练
  17. 一加7从服务器检索信息时出错,一加全能盒子(com.daxiaamu.op7mutools) - 7.8 - 应用 - 酷安...
  18. 埋石图根点lisp代码_速腾矿图 用户手册.pdf
  19. Docker笔记-常用命令
  20. 小程序 底部按钮兼容 iPhone X(解决底部横杠遮挡问题)

热门文章

  1. ldap和kerberos整合大数据账号
  2. SpringCloud发现服务代码(EurekaClient,DiscoveryClient)
  3. Ranger-Kafka插件安装
  4. sql慢查询问题排查
  5. debug没反应 eclipse_解决eclipse无法运行或调试的办法
  6. using filesort和using temporary
  7. Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]
  8. Pyton学习—字符串
  9. [linux]关于deepin截图软件在KDE桌面下无法使用粘贴的解决方法
  10. App-V轻量级应用程序虚拟化之三客户端测试