CodeForces 593B Anton and Lines【数学+排序】
来源:互联网 发布:啥叫淘宝网页客户端 编辑:程序博客网 时间:2024/04/29 04:45
Description
The teacher gave Anton a large geometry homework, but he didn't do it (as usual) as he participated in a regular round on Codeforces. In the task he was given a set of n lines defined by the equations y = ki·x + bi. It was necessary to determine whether there is at least one point of intersection of two of these lines, that lays strictly inside the strip between x1 < x2. In other words, is it true that there are 1 ≤ i < j ≤ n andx', y', such that:
- y' = ki * x' + bi, that is, point (x', y') belongs to the line number i;
- y' = kj * x' + bj, that is, point (x', y') belongs to the line number j;
- x1 < x' < x2, that is, point (x', y') lies inside the strip bounded by x1 < x2.
You can't leave Anton in trouble, can you? Write a program that solves the given task.
Input
The first line of the input contains an integer n (2 ≤ n ≤ 100 000) — the number of lines in the task given to Anton. The second line contains integers x1 and x2 ( - 1 000 000 ≤ x1 < x2 ≤ 1 000 000) defining the strip inside which you need to find a point of intersection of at least two lines.
The following n lines contain integers ki, bi ( - 1 000 000 ≤ ki, bi ≤ 1 000 000) — the descriptions of the lines. It is guaranteed that all lines are pairwise distinct, that is, for any two i ≠ j it is true that either ki ≠ kj, or bi ≠ bj.
Output
Print "Yes" (without quotes), if there is at least one intersection of two distinct lines, located strictly inside the strip. Otherwise print "No" (without quotes).
Sample Input
41 21 21 00 10 2
NO
21 31 0-1 3
YES
21 31 00 2
YES
21 31 00 3
NO
Hint
In the first sample there are intersections located on the border of the strip, but there are no intersections located strictly inside it.
题意:
给出一个区间的左右端点,按直线的截距式给出n条直线的斜率k 和截距b,判断在区间内是否出现直线相交的情况。
题解:
画图分析不难发现,如果直线a 的左右端点的值分别大于直线b 左右两端点,那么两条直线在该区间内不存在交点,否则存在,因此可以按一边的大小进行排序,判断另外一边是否满足条件,输出相应的结果。
#include<cstdio>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;struct edge{ll l,r;}x[100005];int cmp(edge a,edge b){if(a.l==b.l){return a.r<b.r;}return a.l<b.l;}void slove(int n){sort(x,x+n,cmp);for(int i=1;i<n;i++){if(x[i].r<x[i-1].r)//左端点大小已经确定,只需要判断右端点 {printf("YES\n");return;}}printf("NO\n");}int main(){int n;while(~scanf("%d",&n)){ll l,r,k,b;scanf("%lld%lld",&l,&r);for(int i=0;i<n;++i){scanf("%lld%lld",&k,&b);ll y1=l*k+b,y2=r*k+b;x[i].l=y1;x[i].r=y2;}slove(n); }return 0;}
- CodeForces 593B Anton and Lines【数学+排序】
- Codeforces 593B Anton and Lines 【思维】
- codeforces 593B Anton and Lines
- Codeforces 593B Anton and Lines
- CodeForces 593B - Anton and Lines(思维)
- CodeForces - 593B Anton and Lines (数学方程&技巧) 判断直线是否相交
- Codeforces Round #329 (Div. 2) 593B - Anton and Lines
- Codeforces Round #329 (Div. 2)B. Anton and Lines
- Codeforces Round #329 (Div. 2)B. Anton and Lines
- Codeforces Round #329 (Div. 2)B. Anton and Lines
- Code Forces 593 B. Anton and Lines(水~)
- codeforce #329div2 B. Anton and Lines
- cf B. Anton and Lines (STL)
- 【Codeforces Round 329 (Div 2) B】【映射 排序 贪心】Anton and Lines 查看所有直线pair在[x1,x2]范围内是否有交点
- Codeforces593B. Anton and Lines
- Codeforces Round #329 (Div. 2) B. Anton and Lines ([好题] 计算直线在区间是否有交点)
- 【81.37%】【codeforces 734B】Anton and Digits
- codeforces 734B.Anton and Digits
- linux网络编程 第18章
- NodeJS和npm的安装,以及在安装express可能报错的解决办法
- android Bitmap用法总结
- Educational Codeforences Round 9 B
- Node建立HTTP服务器
- CodeForces 593B Anton and Lines【数学+排序】
- CodeForces 626B:Cards【模拟】
- html select下拉框上显示空的实现方法
- Java多线程中run和start的区别
- linux 下 vi学习
- 对C11的“Lambda表达式”总结
- Java Class类的一些总结
- String.split()到底怎么回事
- MySQL的Innodb缓存相关优化