CodeForces 593B Anton and Lines【数学+排序】

来源:互联网 发布:啥叫淘宝网页客户端 编辑:程序博客网 时间:2024/04/29 04:45


B. Anton and Lines

Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u
Submit Status Practice CodeForces 593B

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 kibi ( - 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

Input
41 21 21 00 10 2
Output
NO
Input
21 31 0-1 3
Output
YES
Input
21 31 00 2
Output
YES
Input
21 31 00 3
Output
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;}


0 0