Hello
Having n points in the plane with the property that any 3 of them are collinear, how can I add point to it and maintain this property?
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | maomao90 | 163 |
2 | Um_nik | 163 |
4 | atcoder_official | 161 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | nor | 153 |
9 | Dominater069 | 153 |
Hello
Having n points in the plane with the property that any 3 of them are collinear, how can I add point to it and maintain this property?
Name |
---|
If "any 3 of them are collinear" then they all belong to the same line. Every time you add a point to the set, check if it belongs to the same line. The general equation of the straight line is ax + by = c. These 3 coefficients are determined by the initial two points in the set. Then a point suffices the collinearity property if the equation still holds when you plug in its coordinates. O(1) insertion time.
If, on the other hand, neither of them belong to the same line; you can compute all the lines that pass through that new point and then check that no two of them are coincident. This would have a complexity of O(n) or O(n·logn) per insertion if you use hash or map respectively. This is probably much slower than what you originally intended but I can't think of any other solution (maybe some approximation algorithm?). Anyway, it's a good starting point for those who are unfamiliar with the topic.