博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算区域中有t 个点的 区域有多少个+计算几何 + 叉乘+sort+ 二分 + map poj 2398 Toy Storage...
阅读量:7215 次
发布时间:2019-06-29

本文共 1851 字,大约阅读时间需要 6 分钟。

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

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

#include 
#include
#include
#include
#include
#include
#include
#include
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<
<<" "<
<
>(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
mp;map
::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

你可能感兴趣的文章
费下载最新版万能视频格式转换器是一款功能强大的全能视频格式转换软件
查看>>
算法实战——多叉树全路径遍历
查看>>
MySQL数据类型和常用字段属性总结
查看>>
斑点检测(LoG,DoG)(下)
查看>>
《CLR Via C# 第3版》笔记之(二十二) - APM和EAP
查看>>
洛谷P5111 zhtobu3232的线段树
查看>>
Angular Cli 创建的Angular项目应用本地css文件和js文件
查看>>
java代码getHostAddress .getHostName()的练习
查看>>
【转】一个孩子关于MaD的思考概述
查看>>
C 再识数组指针 指针数组的概念
查看>>
第5次作业
查看>>
倒计时
查看>>
JAVA必会算法--选择排序
查看>>
SEO基础问题:13.什么是关键词密度?
查看>>
Ruby gem install mysql 错误解决
查看>>
坑!!!
查看>>
web前端性能优化
查看>>
java基础-数组的折半查找原理
查看>>
挑战JavaScript正则表达式每日两题(2)
查看>>
个人网盘倒下去 企业网盘顶起来
查看>>