[poj] 2318 TOYS || 判断点在多边形内
原题
给出一个矩形玩具箱和其中隔板的位置,求每个玩具在第几个隔间内(保证没有在线上的玩具)
将玩具按x轴排序,记录当前隔板的编号,每次判断是否需要右移(左移)隔板(因为是有序的,所以移动次数左右不厚超过1),(即判断在该隔板的左或右边,)这样就可以解决了!
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 5050
using namespace std;
int n,m,ans[N];
int Read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
struct point
{
int x,y;
point() {}
point(int _x,int _y) : x(_x),y(_y) {}
bool operator == (const point &b) const
{
return x==b.x && y==b.y;
}
bool operator < (const point &b) const
{
if (x==b.x) return y<b.y;
return x<b.x;
}
point operator - (const point &b) const
{
return point(b.x-x,b.y-y);
}
double operator * (const point &b) const
{
return x*b.y-b.x*y;
}
void read()
{
x=Read();
y=Read();
}
}s,t,f[N];
struct edge
{
point a,b;
bool operator < (const edge &t) const
{
if (a==t.a) return b<t.b;
return a<t.a;
}
}q[N];
void slove()
{
int now=0;
for (int i=1;i<=m;i++)
{
while ((q[now+1].b-f[i])*(q[now+1].a-f[i])<0 && now<n) now++;
while ((q[now].b-f[i])*(q[now].a-f[i])>0 && now) now--;
ans[now]++;
}
}
int main()
{
while (~scanf("%d",&n) && n)
{
memset(ans,0,sizeof(ans));
m=Read();
s.read();
t.read();
q[0].a=s;
q[0].b.x=s.x;
q[0].b.y=t.y;
for (int i=1;i<=n;i++)
q[i].a.x=Read(),q[i].a.y=s.y,q[i].b.x=Read(),q[i].b.y=t.y;
for (int i=1;i<=m;i++)
f[i].read();
sort(q+1,q+n+1);
sort(f+1,f+m+1);
slove();
for (int i=0;i<=n;i++)
printf("%d: %d\n",i,ans[i]);
putchar('\n');
}
return 0;
}
[poj] 2318 TOYS || 判断点在多边形内的更多相关文章
- POJ 2318 TOYS | 二分+判断点在多边形内
题意: 给一个矩形的区域(左上角为(x1,y1) 右下角为(x2,y2)),给出n对(u,v)表示(u,y1) 和 (v,y2)构成线段将矩形切割 这样构成了n+1个多边形,再给出m个点,问每个多边形 ...
- POJ 2318 TOYS(叉积+二分)
题目传送门:POJ 2318 TOYS Description Calculate the number of toys that land in each bin of a partitioned ...
- zoj 1081 判断点在多边形内
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...
- 判断点在多边形内算法的C++实现
目录 1. 算法思路 2. 具体实现 3. 改进空间 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标 ...
- hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- php之判断点在多边形内的api
1.判断点在多边形内的数学思想:以那个点为顶点,作任意单向射线,如果它与多边形交点个数为奇数个,那么那个点在多边形内,相关公式: <?php class AreaApi{ //$area是一个多 ...
- ZOJ 1081 Points Within | 判断点在多边形内
题目: 给个n个点的多边形,n个点按顺序给出,给个点m,判断m在不在多边形内部 题解: 网上有两种方法,这里写一种:射线法 大体的思想是:以这个点为端点,做一条平行与x轴的射线(代码中射线指向x轴正方 ...
- R树判断点在多边形内-Java版本
1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...
- A Round Peg in a Ground Hole - POJ 1584 (判断凸多边形&判断点在多边形内&判断圆在多边形内)
题目大意:首先给一个圆的半径和圆心,然后给一个多边形的所有点(多边形按照顺时针或者逆时针给的),求,这个多边形是否是凸多边形,如果是凸多边形在判断这个圆是否在这个凸多边形内. 分析:判断凸多边形可 ...
随机推荐
- Java分享笔记:Map集合(接口)的基本方法程序演示
package pack02; import java.util.*; public class MapDemo { public static void main(String[] args) { ...
- phonegap二维码扫描插件
原文出处:http://rensanning.iteye.com/blog/2034026 谈谈我使用这个的体会吧; git地址 https://github.com/wildabeast/Barco ...
- Navicat Premium Mac 12 破解
破解地址:https://blog.csdn.net/xhd731568849/article/details/79751188 亲测有效
- python错误处理之try...except...finally...错误处理机制。
今天学习了python的错误处理. 在程序处理的过程中,经常会出现错误,一旦出错就会非常麻烦.所以有的高级语言通常都内置了一套 try...exept...finaly...的错误处理机制,pyth ...
- yii2深入理解之内核解析
一.前言 首先,yii2最为为数不多的PHP主流开源框架,受欢迎程度不亚于laravel和TP.个人认为,研究这些框架底层代码是非常有助于自身代码编程思想的提升和代码简化程度和质量的提升的. 那么,话 ...
- 17-比赛1 F - 较小元素 Weak in the Middle (set)
Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton. He ...
- python正则表达式02--findall()和search()方法区别,group()方法
import re st = 'asxxixxsaefxxlovexxsdwdxxyouxxde' #search()和 findall()的区别 a = re.search('xx(.*?)xxsa ...
- spider_main.py
coding=UTF-8 import html_download import html_outputer import html_parser import url_maneger class S ...
- [转]渗透测试tips...零碎的小知识
1.拿到一个待检测的站,你觉得应该先做什么?收集信息whois.网站源IP.旁站.C段网站.服务器系统版本.容器版本.程序版本.数据库类型.二级域名.防火墙.维护者信息另说… 2.mysql的网站注入 ...
- MySQL 5.7.18 压缩包版配置记录
1.解压到一个目录(建议根目录),比如:D:\mysql2.在系统Path中添加 D:\mysql\bin3.这个版本不带my-default.ini,需要自己写,放在D:\mysql\my.ini, ...