【问题描述】

小 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(钟神)的问题)的更多相关文章

  1. bzoj4814: [Cqoi2017]小Q的草稿

    Description 小Q是个程序员.众所周知,程序员在写程序的时候经常需要草稿纸.小Q现在需要一张草稿纸用来画图,但是桌上 只有一张草稿纸,而且是一张被用过很多次的草稿纸.草稿纸可以看作一个二维平 ...

  2. HDU 1558 Segment set( 判断线段相交 + 并查集 )

    链接:传送门 题意:输入一个数 n 代表有 n 组操作,P 是在平面内加入一条线段,Q x 是查询第 x 条线段所在相交集合的线段个数 例如:下图 5 与 1.2 相交,1 与 3 相交,2 与 4 ...

  3. hdu 1558 线段相交+并查集

    题意:要求相交的线段都要塞进同一个集合里 sol:并查集+判断线段相交即可.n很小所以n^2就可以水过 #include <iostream> #include <cmath> ...

  4. hdu 1558 (线段相交+并查集) Segment set

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...

  5. POJ 1066 Treasure Hunt (线段相交)

    题意:给你一个100*100的正方形,再给你n条线(墙),保证线段一定在正方形内且端点在正方形边界(外墙),最后给你一个正方形内的点(保证不再墙上) 告诉你墙之间(包括外墙)围成了一些小房间,在小房间 ...

  6. POJ 1556 The Doors【最短路+线段相交】

    思路:暴力判断每个点连成的线段是否被墙挡住,构建图.求最短路. 思路很简单,但是实现比较复杂,模版一定要可靠. #include<stdio.h> #include<string.h ...

  7. 简单几何(线段相交)+模拟 POJ 3449 Geometric Shapes

    题目传送门 题意:给了若干个图形,问每个图形与哪些图形相交 分析:题目说白了就是处理出每个图形的线段,然后判断是否相交.但是读入输出巨恶心,就是个模拟题加上线段相交的判断,我第一次WA不知道输出要按字 ...

  8. 简单几何(直线与线段相交) POJ 1039 Pipe

    题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...

  9. 简单几何(线段相交) POJ 1410 Intersection

    题目传送门 题意:一个矩形和一条线段,问是否有相交 分析:考虑各种情况.坑点:给出的矩形的两个端点是无序的,还有线段完全在矩形内也算相交 /****************************** ...

随机推荐

  1. easyui日期在未加载easyui-lang-zh_CN.js出现英文的情况下加载中文的方法

    我们有时候在操作easyui的时候本来是加载了easyui-lang-zh_CN.js中文文件包,但是还是出现了英文.使得我们不得埋怨这框架咋这么不好用,其实我们仔细看看这个中文包就会发现里面很多都是 ...

  2. angular源码分析:angular中各种常用函数,比较省代码的各种小技巧

    angular的工具函数 在angular的API文档中,在最前面就是讲的就是angular的工具函数,下面列出来 angular.bind //用户将函数和对象绑定在一起,返回一个新的函数 angu ...

  3. js资源加载优化

    互联网应用或者访问量大的应用,对js的加载优化是不可少的.下面记录几种优化方法 CDN  + 浏览器缓存 CDN(content delivery network)内容分发网络, 最传统的优化方式.其 ...

  4. 如何将List<string>转化为string

    Convert List, string. A List can be converted to a string. This is possible with the ToArray method ...

  5. HTML5 video 和 audio

    video 用于在HTML或者XHTML文档中嵌入视频内容 使用 video 元素至少要提供两种视频格式的文件:OGG 和 MP4 OGG:采用 Theora 视频格式和 Vorbis 音频解码器 ( ...

  6. 高性能的JavaScript库---Lodash

    上周在仿做Nodejs社区的时候,遇到了lodash这个javascript库,很惭愧,那也是我第一次听说lodash.人嘛,对于新鲜的事物总是会或多或少感到些好奇的,于是就毫不犹豫地去lodash官 ...

  7. Httplistener Access Denied

    HttpListener.Start() 会出现HttpListenerException, 显示拒绝访问 一般是因为有些计算机账户是没有权限创建 HttpListener服务, 但是可以注册一些规则 ...

  8. SharePoint:WebPartPageUserException This page has encountered a critical error

    遇到如下webpart莫名错误,很常见吧.一般用户是直接删掉,知道原因的不算太多. 解决办法(Solution): Usually, This error caused by wrong entrie ...

  9. iOS 关于手势

    不同视图不能同时添加相同手势!

  10. 学习 HTML5-目录

    1.学习 HTML5-页面结构 2.HTML5标记 3.HTML5机构化语义元素 4.HTML5表单 5.HTML5媒体元素:Audio和Video 6.HTML5绘图API 7.HTML5 Canv ...