POJ - 2318 TOYS(叉积+二分)
题目链接:点击查看
题目大意:给出一个盒子,由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(叉积+二分)相关推荐
- poj 2318 TOYS amp; poj 2398 Toy Storage (叉积)
链接:poj 2318 题意:有一个矩形盒子,盒子里有一些木块线段.而且这些线段坐标是依照顺序给出的. 有n条线段,把盒子分层了n+1个区域,然后有m个玩具.这m个玩具的坐标是已知的,问最后每一个区域 ...
- AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)
计算几何基础题 题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球. 我们首先考虑暴力. 我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x ...
- poj 2318 TOYS
TOYS 题意:给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数. 思路:这道题很水,只是要知道会使用叉乘来表示点在线的上面还是下面: 当a ...
- [poj] 2318 TOYS || 判断点在多边形内
原题 给出一个矩形玩具箱和其中隔板的位置,求每个玩具在第几个隔间内(保证没有在线上的玩具) 将玩具按x轴排序,记录当前隔板的编号,每次判断是否需要右移(左移)隔板(因为是有序的,所以移动次数左右不厚超 ...
- A - TOYS POJ - 2318
A - TOYS POJ - 2318 题意: 一个盒子中有n个隔板,分出n+1个空间(从左往右空间的编号分别是0-n),(隔板之间不会相交,且按照从左往右的顺序给出),现在给你m个坐标的物品,问盒子 ...
- poj 1064 java_poj 1064(二分答案)
题意: 有N条绳子,长度分别为 length[1,2,3,........,N]. 如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长有多长? 结果保留两位小数. 题解: 二分可能的长度. AC ...
- Linux等比数列脚本求和,POJ 1845 (约数和+二分等比数列求和)
题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1)*(P2^K2)*(P3^K3).....*(Pn^Kn)的形式.其中Pn ...
- POJ - 1905 (几何+二分)
POJ - 1905 (几何+二分) 题目正文如下: When a thin rod of length L is heated n degrees, it expands to a new leng ...
- 【POJ - 2318】TOYS(计算几何,叉积判断点与直线位置关系,二分)
题干: Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad have a ...
最新文章
- 树莓派练习程序(火焰检测)
- Android,使用Json发送数据中,使用的Java转义字符 KanKan原创
- Efficient Graph-Based Image Segmentation
- cdi 2.7.5_看一下CDI 2.0 EDR1
- EntityModelStudio系列教程
- Boltzmann 玻尔兹曼机(BM)
- 3GPP TS 29244-g30 中英文对照 | 7.3 Message Types
- php中关于qq第三方登录
- 基于Q-Learning 的FlappyBird AI
- 高维空间中点到超平面的距离
- 【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
- 操作既简单、实用性强的文件批量改名高手
- 虚幻C++入门个人笔记(3)——接口、智能指针、动画蓝图、行为树、EQS系统
- 支付系统就该这么设计(万能通用)
- 强制关机后进不了系统
- 最有效的穴位按摩减肥法
- DBMS_AW_EXP: not AW$
- 公比为无理数的等比数列的近似表示
- 消防应急灯锂电池供电2.5V-30V升压恒流驱动IC方案
- 旗舰计算机系统蓝图,【求助】求助大神给这些蓝图一个参考定价