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. 第三十六篇、webService

    在很多的情况下,我们会常常遇到webservive写的接口,往往这种情况下,我们就需要拼接一段报文去与服务器对接 首先要明白webService的工作原理,,,(http://www.cnblogs. ...

  2. Tab 防刷新

    今天发现项目中有个小毛病,就是tab老是刷新,就上网Copy了一份防止刷新的Tab例子,谢咯. 贴上来参考一下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  3. 基于asp.net的Web开发架构探索

    问题由来 最近在研究适合团队开发的web架构解决方案,该架构即要适合分工协作又要有一定扩展性,适合不同的数据库需要,因此我查阅了一些资料,初步构想出了一套架构,请各位多多指教. 探索 web开发架构最 ...

  4. 【ios控件】UIScrollView 事件说明

    // // UIDemoViewController.m // 06-1UIScrollDemo // // Created by k on 14-9-4. // Copyright (c) 2014 ...

  5. 创建featureclass,为它赋别名,并移动到数据集下

    if (pOutFtrClass == null) { //continue; //创建featureclass //得到规范的字段集 IFields pFields = pFeatureClass. ...

  6. OCI下报出的数据库重账错

    [2014-01-09 19:43:45.469220][22347888] Level 0 COCITOOL: Error - OCI_ERROE - errcode[1],errmsg[ORA-0 ...

  7. SOCKET编程:为什么recv不阻塞

    服务器端: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #incl ...

  8. SAP第一轮面试之英语群面

    很高兴通过了SAP的笔试,昨天进行了一轮面试.SAP一轮面试是英语群面(无领导小组讨论) 面试提前大约五天的样子通知面试时间地点,一般是在公司,要求正装.这些都会在HR联系你时通知的,所以不再啰嗦. ...

  9. String inputStream file转化

    String --> InputStreamByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); Inp ...

  10. 短租app简析

    本人应聘某短租app产品经理时做的材料,贴出来请高手指教. 所有内容来自公开资料,不涉及商业秘密.