Life is a Line |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) |
Total Submission(s): 192 Accepted Submission(s): 71 |
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 |
Author
题目大意:
给出 一个区间 ( l r),给出 n条直线,问这些直线有多少交点在区间内。
思路;
我们先求出给出每条直线在 l r 上交点,如果 两条直线相交,那么 a 直线在 l 上的交点 在 b 直线在 l 上的交点下面 并且,a 直线在 r 上的交点在 b 直线与 r 交点的上方,或者是反过来,因此想到用逆序数来解决这个问题。
我们首先按照在 l 上交点 从小到大排序,然后编上序号,按照r上的顺序,从大到小排序,统计就可以了。
特殊考虑的地方:
直线和 y 轴平行。
实话,printf 比 cout 快
AC代码:
|
HDU 3465 Life is a Line 树状数组求逆序数
最新推荐文章于 2019-08-03 13:41:10 发布