Life is a Line |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) |
Total Submission(s): 217 Accepted Submission(s): 81 |
Problem Description
There is a saying: Life is like a line, some people are your parallel lines, while others are destined to meet you.
Maybe have met, maybe just a matter of time, two unparallel lines will always meet in some places, and now a lot of life (i.e. line) are in the same coordinate system, in a given open interval, how many pairs can meet each other? |
Input
There are several test cases in the input.
Each test case begin with one integer N (1 ≤ N ≤ 50000), indicating the number of different lines. Then two floating numbers L, R follow (-10000.00 ≤ L < R ≤ 10000.00), indicating the interval (L, R). Then N lines follow, each line contains four floating numbers x1, y1, x2, y2 (-10000.00 ≤ x1, y1, x2, y2 ≤ 10000.00), indicating two different points on the line. You can assume no two lines are the same one. The input terminates by end of file marker. |
Output
For each test case, output one integer, indicating pairs of intersected lines in the open interval, i.e. their intersection point’s x-axis is in (l, r).
|
Sample Input
3 0.0 1.0 0.0 0.0 1.0 1.0 0.0 2.0 1.0 2.0 0.0 2.5 2.5 0.0 |
Sample Output
1 问题:求在 (l, r)范围内有多少个交点,看起来好像是个几何题。。。时间上是一个求逆序数的问题。
只要直线不平行于y轴就一定会 跟 x = l, x = r这两条直线相交。对于任意两条直线x=l,和x=r的交点分别为xl,xr,两直线在(L,R)相交,必然有 xl1>xl2&&xr1<xr2 或者 xl1<xl2&&xr1>xr2,(A.L-B.L)*(A.R-B.R)<0
所以可以用逆序数来求解。
|
HDU 3465 Life is a Line (逆序数 + 数状数组)
最新推荐文章于 2018-09-16 14:19:55 发布