#include using namespace std; #define pii pair #define F first #define S second #define pb push_back #define Task "SEGMENTS" struct P{ int x, y; P(int _x = 0, int _y = 0): x(_x), y(_y) {} void read(){ cin >> x >> y; } P operator -(const P &o){ return P(x - o.x, y - o.y); } bool operator ==(const P &o){ return (x == o.x && y == o.y); } }; int cross(const P &p1, const P &p2){ return p1.x * p2.y - p1.y * p2.x; } const int N = 107; int n, ans; P a[N], b[N]; vector

p; bool inter(P p1, P p2, P p3, P p4){ // p1, p2: line // p3, p4: segment if (cross(p2 - p1, p4 - p3) == 0){ if (cross(p2 - p1, p3 - p1) == 0) return true; return false; } int sign = cross(p2 - p1, p3 - p1), sign2 = cross(p2 - p1, p4 - p1); if ((sign > 0 && sign2 > 0) || (sign < 0 && sign2 < 0)) return false; return true; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen(Task".inp", "r", stdin); // freopen(Task".out", "w", stdout); cin >> n; for (int i = 1; i <= n; i ++){ a[i].read(); b[i].read(); p.pb(a[i]); p.pb(b[i]); } for (int i = 0; i < p.size(); i ++){ for (int j = i + 1; j < p.size(); j ++){ if (p[i] == p[j]) continue; int cnt = 0; for (int k = 1; k <= n; k ++){ cnt += inter(p[i], p[j], a[k], b[k]); } ans = max(ans, cnt); } } cout << ans; }