平面直接坐标系线段相交问题(小Q(钟神)的问题)
【问题描述】
小 Q 对计算几何有着浓厚的兴趣。他经常对着平面直角坐标系发呆,思考
一些有趣的问题。今天,他想到了一个十分有意思的题目:
首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点。随后,他将?轴的
点与?轴的点一一连接,形成?条线段,并保证任意两条线段不相交。小 Q 确定
这种连接方式有且仅有一种。最后,小 Q 会给出?个询问。对于每个询问,将会
给定一个点?(? ? ,? ? ),请回答线段 OP 与?条线段会产生多少个交点?
小 Q 找到了正在钻研数据结构的你,希望你可以帮他解决这道难题。
【输入格式】
第1一个正整数?,表示线段的数量;
第2横 第3行包含?个正整数,表示小 Q 在?轴选取的点的纵坐标;
第 4 行包含一个正整数?,表示询问数量;
随后?行,每行包含两个正整数? ? ,? ? ,表示询问中给定的点的横、纵坐标。
【输出格式】
共?行,每行包含一个非负整数,表示你对这条询问给出的答案。
【样例输入】
3
4 5 3
3 5 4
2
1 1
3 3
【样例输出】
0
3
【样例解释】
然后塔里啥都没有,除了钟神。
【数据规模与约定】
50%的数据,1 ≤ ?,?,≤ 2 × 10 3 。
对于100%的数据,1 ≤ ?,? ≤ 2× 10 5 ,坐标范围≤ 10 8 。
思路:
给你很多很多的横坐标和纵坐标,然后告诉我们这全能够连成线段;
当时做的时候,一看直接蒙圈,写了个tle自动机就睡觉去了,现在一看原来这么简单;
因为连成的线段互不相交
所以这些线段与x轴y轴的交点一定有单调性(自己画个图马上就明白)
所以先将这些横坐标纵坐标排序
然后
跟据已经排好序的x,和下标相同的y来组成线段
求出线段所在直线的k,b(y==x*k+b);
接下来就是二分答案;
二分线段下标
如果将当前点的坐标带入当前线段直线度的解析式所得的值大于当前点
则向前二分
如果小于当前点的话
则记录答案,向后二分
最后输出答案
来,上代码:
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; struct node {
double k,b;
};
struct node edge[];
double a[],b[];
int n,m; int check(double x,double y)//check才是二分的精髓
{
double cur;
int mid,l=,r=n,ans=;
while(l<=r)
{
mid=(l+r)/;
cur=edge[mid].k*x+edge[mid].b;
if(cur<=y) ans=mid,l=mid+;
else r=mid-;
}
return ans;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%llf",&a[i]);
for(int i=;i<=n;i++) scanf("%llf",&b[i]);
sort(a+,a+n+);
sort(b+,b+n+);
for(int i=;i<=n;i++) edge[i].b=b[i],edge[i].k=-*edge[i].b/a[i];
scanf("%d",&m);
double px,py;
for(double i=;i<=m;i++)
{
scanf("%llf%llf",&px,&py);
printf("%d\n",check(px,py));
}
return ;
}
平面直接坐标系线段相交问题(小Q(钟神)的问题)的更多相关文章
- bzoj4814: [Cqoi2017]小Q的草稿
Description 小Q是个程序员.众所周知,程序员在写程序的时候经常需要草稿纸.小Q现在需要一张草稿纸用来画图,但是桌上 只有一张草稿纸,而且是一张被用过很多次的草稿纸.草稿纸可以看作一个二维平 ...
- HDU 1558 Segment set( 判断线段相交 + 并查集 )
链接:传送门 题意:输入一个数 n 代表有 n 组操作,P 是在平面内加入一条线段,Q x 是查询第 x 条线段所在相交集合的线段个数 例如:下图 5 与 1.2 相交,1 与 3 相交,2 与 4 ...
- hdu 1558 线段相交+并查集
题意:要求相交的线段都要塞进同一个集合里 sol:并查集+判断线段相交即可.n很小所以n^2就可以水过 #include <iostream> #include <cmath> ...
- hdu 1558 (线段相交+并查集) Segment set
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...
- POJ 1066 Treasure Hunt (线段相交)
题意:给你一个100*100的正方形,再给你n条线(墙),保证线段一定在正方形内且端点在正方形边界(外墙),最后给你一个正方形内的点(保证不再墙上) 告诉你墙之间(包括外墙)围成了一些小房间,在小房间 ...
- POJ 1556 The Doors【最短路+线段相交】
思路:暴力判断每个点连成的线段是否被墙挡住,构建图.求最短路. 思路很简单,但是实现比较复杂,模版一定要可靠. #include<stdio.h> #include<string.h ...
- 简单几何(线段相交)+模拟 POJ 3449 Geometric Shapes
题目传送门 题意:给了若干个图形,问每个图形与哪些图形相交 分析:题目说白了就是处理出每个图形的线段,然后判断是否相交.但是读入输出巨恶心,就是个模拟题加上线段相交的判断,我第一次WA不知道输出要按字 ...
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- 简单几何(线段相交) POJ 1410 Intersection
题目传送门 题意:一个矩形和一条线段,问是否有相交 分析:考虑各种情况.坑点:给出的矩形的两个端点是无序的,还有线段完全在矩形内也算相交 /****************************** ...
随机推荐
- 原生JS:Math对象详解
Math对象 本文参考MDN做的详细整理,方便大家参考MDN Math 也是一个内置对象, 为数学常量和数学函数提供了属性和方法,而不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造 ...
- 【Leafletjs】6.Control.Loading推展-在地图上边框添加加载动态条
在已有的Control.Loading控件基础上结合CSS3 animation属性实现 .nz-loading .nz-loader { display: block; -webkit-animat ...
- iOS不同IDS说明
1.Vindor标识符 identifierForVendor 一个英文字符串,对于相同的产品商(这里指com.zhang.*,也就是前缀一样),其唯一的标识设备. * 这个值对于相同的产品商在相同 ...
- 安装php扩展
下面我以soap安装为例子 cd /home/zhangy/php-5.2.6/ext/soap /usr/local/php/bin/phpize#确定php-config文件在不在,调用php-c ...
- 集合迭代器快速失败行为及CopyOnWriteArrayList
以下内容基于jdk1.7.0_79源码: 什么是集合迭代器快速失败行为 以ArrayList为例,在多线程并发情况下,如果有一个线程在修改ArrayList集合的结构(插入.移除...),而另一个线程 ...
- Memcache知识点梳理
Memcache知识点梳理 Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HAS ...
- DateTime , DateTime2 ,DateTimeOffset 之间的小区别
闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭ DateTime DateTime2 DateTimeOffset 日期范围 1753-01-01到 9999-12-31 00 ...
- javax.servlet.ServletException cannot be resolved to a type错误解决方法
在页面中使用全局路径时${pageContext.request.contextPath}出现javax.servlet.ServletException cannot be resolved to ...
- 深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...
- top:failed tty get 错误
运行命令,ps -ef | grep test | grep -v test | awk '{ print $2 }' | xargs top -H -p 想看test的实时状态,结果报了错,查了一下 ...