题目链接:点击查看

题目大意:给出一个盒子,由n条互不相交的线段分割为n+1个空格,现在有m个玩具的坐标,现在问每个空格内有多少个玩具

题目分析:利用叉积的性质判断点在直线的哪一侧:

以点在直线左侧为例,对于一个点来说,n条线段就具有了单调性,以此二分找到该点右边的直线,则就确定了当前点所在的空格了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e3+100;int ans[N];struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%lf%lf",&x,&y);}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}
}point[N];struct Line{Point s,e;Line(){}Line(Point _s,Point _e){s = _s;e = _e;}
}line[N];int xmult(Point p0,Point p1,Point p2)// ans>0左边 ans<0右边
{return (p1-p0)^(p2-p0);
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,m,x1,y1,x2,y2;while(scanf("%d",&n)!=EOF&&n){scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);for(int i=0;i<n;i++){int u,l;scanf("%d%d",&u,&l);line[i]=Line(Point(u,y1),Point(l,y2));}line[n]=Line(Point(x2,y1),Point(x2,y2));memset(ans,0,sizeof(ans));while(m--){Point p;p.input();int l=0,r=n,mark;while(l<=r){int mid=l+r>>1;if(xmult(p,line[mid].s,line[mid].e)<0){mark=mid;r=mid-1;}elsel=mid+1;}ans[mark]++;}for(int i=0;i<=n;i++)printf("%d: %d\n",i,ans[i]);printf("\n");}return 0;
}

POJ - 2318 TOYS(叉积+二分)相关推荐

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

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

  2. AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)

    计算几何基础题 题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球. 我们首先考虑暴力. 我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x ...

  3. poj 2318 TOYS

    TOYS 题意:给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数. 思路:这道题很水,只是要知道会使用叉乘来表示点在线的上面还是下面: 当a ...

  4. [poj] 2318 TOYS || 判断点在多边形内

    原题 给出一个矩形玩具箱和其中隔板的位置,求每个玩具在第几个隔间内(保证没有在线上的玩具) 将玩具按x轴排序,记录当前隔板的编号,每次判断是否需要右移(左移)隔板(因为是有序的,所以移动次数左右不厚超 ...

  5. A - TOYS POJ - 2318

    A - TOYS POJ - 2318 题意: 一个盒子中有n个隔板,分出n+1个空间(从左往右空间的编号分别是0-n),(隔板之间不会相交,且按照从左往右的顺序给出),现在给你m个坐标的物品,问盒子 ...

  6. poj 1064 java_poj 1064(二分答案)

    题意: 有N条绳子,长度分别为 length[1,2,3,........,N]. 如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长有多长? 结果保留两位小数. 题解: 二分可能的长度. AC ...

  7. Linux等比数列脚本求和,POJ 1845 (约数和+二分等比数列求和)

    题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1)*(P2^K2)*(P3^K3).....*(Pn^Kn)的形式.其中Pn ...

  8. POJ - 1905 (几何+二分)

    POJ - 1905 (几何+二分) 题目正文如下: When a thin rod of length L is heated n degrees, it expands to a new leng ...

  9. 【POJ - 2318】TOYS(计算几何,叉积判断点与直线位置关系,二分)

    题干: Calculate the number of toys that land in each bin of a partitioned toy box.  Mom and dad have a ...

最新文章

  1. 树莓派练习程序(火焰检测)
  2. Android,使用Json发送数据中,使用的Java转义字符 KanKan原创
  3. Efficient Graph-Based Image Segmentation
  4. cdi 2.7.5_看一下CDI 2.0 EDR1
  5. EntityModelStudio系列教程
  6. Boltzmann 玻尔兹曼机(BM)
  7. 3GPP TS 29244-g30 中英文对照 | 7.3 Message Types
  8. php中关于qq第三方登录
  9. 基于Q-Learning 的FlappyBird AI
  10. 高维空间中点到超平面的距离
  11. 【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
  12. 操作既简单、实用性强的文件批量改名高手
  13. 虚幻C++入门个人笔记(3)——接口、智能指针、动画蓝图、行为树、EQS系统
  14. 支付系统就该这么设计(万能通用)
  15. 强制关机后进不了系统
  16. 最有效的穴位按摩减肥法
  17. DBMS_AW_EXP: not AW$
  18. 公比为无理数的等比数列的近似表示
  19. 消防应急灯锂电池供电2.5V-30V升压恒流驱动IC方案
  20. 旗舰计算机系统蓝图,【求助】求助大神给这些蓝图一个参考定价

热门文章

  1. MySQL sql99语法—自连接
  2. Nginx的http块MIME-Type的使用
  3. mybatis-翻页
  4. Spring5的AOP 和设备支持
  5. 引入了一个IO多路复用模型
  6. Lambda表达式练习2【应用】
  7. 改造微服务注册到eureka注册中心
  8. jvm_虚拟机参数讲解(一)
  9. mysql 界面 创建用户名和密码是什么_PLSQL操作Oracle创建用户和表(含创建用户名和密码)...
  10. java文件中有中文,在windows下因编码不一致,而导致编译失败的处理方法。