B. Anton and Lines
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 are1 ≤ i < j ≤ n and x', 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.
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.
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).
4
1 2
1 2
1 0
0 1
0 2
NO
2
1 3
1 0
-1 3
YES
2
1 3
1 0
0 2
YES
2
1 3
1 0
0 3
NO
In the first sample there are intersections located on the border of the strip, but there are no intersections located strictly inside it.
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 5 struct line 6 { 7 long long sy,ey; 8 }p[100005]; 9 10 bool cmp(line a,line b) 11 { 12 if(a.sy==b.sy)return a.ey<b.ey; 13 return a.sy<b.sy; 14 } 15 16 int main() 17 { 18 int n; 19 while(scanf("%d",&n)!=EOF) 20 { 21 int x1,x2; 22 scanf("%d%d",&x1,&x2); 23 for(int i=0;i<n;i++) 24 { 25 int k,b; 26 scanf("%d%d",&k,&b); 27 p[i].sy=(long long)k*x1+b; 28 p[i].ey=(long long)k*x2+b; 29 } 30 sort(p,p+n,cmp); 31 int k=0; 32 for(;k<n-1;k++) 33 if(p[k].sy<p[k+1].sy&&p[k].ey>p[k+1].ey)break; 34 if(k==n-1) 35 puts("NO"); 36 else 37 puts("YES"); 38 } 39 return 0; 40 }