2318 TOYS

2398 Toy Storage

题意 : 给你n块板的坐标,m个玩具的具体坐标,2318中板是有序的,而2398无序需要自己排序,2318要求输出的是每个区间内的玩具数,而2318要求输出的是有 i 个玩具的区间有几个。

思路 : 两个题基本差不多,只不过2398排一下序,然后再找个数组标记一下就行。

这个题我一开始没想到用二分,判断了点在四边形内但是没写下去,然后看了网上的二分区间,利用叉积判断点在左边还是右边。

2318代码:

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream> using namespace std ; struct point
{
int x,y ;
}p ;
struct line
{
point a,b ;
} eline[] ; int s[] ; int xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) ;
} void binary_searc(point p,int a)
{
int l = , r = a- ,mid ;
while(l < r)
{
mid = (l + r) / ;
if(xmult(p,eline[mid].a,eline[mid].b) > ) l = mid+ ;
else r = mid ;
}
if(xmult(p,eline[l].a,eline[l].b) < ) s[l] ++ ;
else s[l+] ++ ;
}
int main()
{
int m,n,x1,x2,y1,y2 ;
while(scanf("%d",&n) != EOF)
{
if(n == ) break ;
scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2) ;
memset(s,,sizeof(s)) ;
for(int i = ; i < n ; i++)
{
scanf("%d %d",&eline[i].a.x,&eline[i].b.x) ;
eline[i].a.y = y1 ;
eline[i].b.y = y2 ;
}
for(int i = ; i < m ; i++)
{
scanf("%d %d",&p.x,&p.y) ;
binary_searc(p,n) ;
}
for(int i = ; i <= n ; i++)
printf("%d: %d\n",i,s[i]) ;
printf("\n") ;
}
return ;
}

2398代码 :

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm> using namespace std ; struct point
{
int x,y ;
}p ;
struct line
{
point a,b ;
} eline[] ; int s[],s1[] ; int xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) ;
} int cmp(const line &aa,const line &bb)
{
if (min(aa.a.x, aa.b.x) == min(bb.a.x, aa.b.x))
return max(aa.a.x, aa.b.x) < max(bb.a.x, bb.b.x);
return min(aa.a.x, aa.b.x) < min(bb.a.x, aa.b.x);
}
void binary_searc(point p,int a)
{
int l = , r = a- ,mid ;
while(l < r)
{
mid = (l + r) / ;
if(xmult(p,eline[mid].a,eline[mid].b) > ) l = mid+ ;
else r = mid ;
}
if(xmult(p,eline[l].a,eline[l].b) < ) s[l] ++ ;
else s[l+] ++ ;
}
int main()
{
int m,n,x1,x2,y1,y2 ;
while(scanf("%d",&n) != EOF)
{
if(n == ) break ;
scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2) ;
memset(s,,sizeof(s)) ;
memset(s1,,sizeof(s1)) ;
for(int i = ; i < n ; i++)
{
scanf("%d %d",&eline[i].a.x,&eline[i].b.x) ;
eline[i].a.y = y1 ;
eline[i].b.y = y2 ;
}
sort(eline,eline+n,cmp) ;
for(int i = ; i < m ; i++)
{
scanf("%d %d",&p.x,&p.y) ;
binary_searc(p,n) ;
}
for(int i = ; i <= n ; i++)
s1[s[i]] ++ ;
printf("Box\n") ;
for(int i = ; i <= m ; i++)
{
if(s1[i] != )
printf("%d: %d\n",i,s1[i]) ;
}
// for(int i = 0 ; i <= n ; i++)
// printf("%d: %d\n",i,s[i]) ;
// printf("\n") ;
}
return ;
}

POJ 2318 TOYS && POJ 2398 Toy Storage(几何)的更多相关文章

  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/POJ 2398 Toy Storage

    计算几何终于开坑了... 叉积+二分. #include<iostream> #include<cstdio> #include<cstring> #include ...

  4. poj 2398 Toy Storage(计算几何)

    题目传送门:poj 2398 Toy Storage 题目大意:一个长方形的箱子,里面有一些隔板,每一个隔板都可以纵切这个箱子.隔板将这个箱子分成了一些隔间.向其中扔一些玩具,每个玩具有一个坐标,求有 ...

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

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

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

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

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

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

  8. POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3146   Accepted: 1798 Descr ...

  9. POJ 2398 - Toy Storage - [计算几何基础题][同POJ2318]

    题目链接:http://poj.org/problem?id=2398 Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad ...

随机推荐

  1. asterisk 语音文件转换

    Centos wav to sln sox foo-in.wav -t raw -r 8000 -s -2 -c 1 foo-out.sln 当前目录下所有语音wav文件 转换成sln for a i ...

  2. 暑假集训(5)第二弹———湫湫系列故事——减肥记I(hdu4508)

    问题描述:舔了舔嘴上的油渍,你陷在身后柔软的靠椅上.在德源大赛中获得优胜的你,迫不及待地赶到“吃到饱”饭店吃到饱.当你 正准备离开时,服务员叫住了你,“先生,您还没有吃完你所点的酒菜.”指着你桌上的一 ...

  3. QT编译mysql驱动

    一. 下载mysql C链接库 地址:http://dev.mysql.com/downloads/ 根据当前系统选择下载: 二. 安装下载好的mysql驱动文件 注意,一定要安装在不含有中文.空格以 ...

  4. makefile--编码修改-空格出现错误

    "makefile", line 40: make: 1254-055 Dependency line needs colon or double colon operator. ...

  5. MySQL的相关设置

    1.启动MySQL服务:#  service mysqld start 2.为MySQL设置root用户密码:# mysql -u root mysql>set password for roo ...

  6. Apache 编译安装

    # wget http://www.apache.org/dist/httpd/httpd-2.2.9.tar.gz  (此处我是直接用的下载好的包) # tar -zxvf httpd-2.2.9. ...

  7. Xcode更改配色方案

    更改配色方案:Xcode > PReferences > Fonts & Color /********************************************** ...

  8. object-c实现的 在PHP中oauth加密算法

    说起这个算法,在php中我是这么实现的 function generateSig ($params, $secret = '') {     if (empty($secret)) {         ...

  9. 让nginx支持PHP

    MAC为例 1.安装nginx brew install nginx 2.查找nginx配置文件在什么地方 find /|grep nginx.conf 3.修改配置文件nginx.conf cd / ...

  10. Beaglebone Back学习五(PWM测试)

    PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 ...