Boj 2650) 교차점 개수 Home / Posts / Algorithm / Boj-gold / 4 분 소요 문제 백준 2650 설명 2차원 공간을 1차원 으로 매핑하면 문제가 간단해짐. 어차피 직사각형 위에서 움직이므로 가능함 교차하는건 두 선을 이루는 점이 번갈아가면서 오는 경우가 됨. 시간복잡도 O(\(N^2\)) 코드 struct P { int p1, p2; }; P pt[51]; int ans[51]; inline int Intep(int t, int p) { switch (t) { case 1: return 1 * 1000 + p; case 4: return 2 * 1000 + p; case 2: return 3 * 1000 - p; case 3: return 4 * 1000 - p; } } inline bool Check(P& a, P& b) { if (a.p1 < b.p1) return b.p1 < a.p2 && a.p2 < b.p2; // a1 b1 a2 b2 else return a.p1 < b.p2 && b.p2 < a.p2; // b1 a1 b2 a2 } int main() { fastio; int n; cin >> n; n /= 2; for (int i = 0; i < n; i++) { int t, p, p1, p2; cin >> t >> p; p1 = Intep(t, p); cin >> t >> p; p2 = Intep(t, p); pt[i].p1 = min(p1, p2); pt[i].p2 = max(p1, p2); } for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) { bool cur = Check(pt[i], pt[j]); ans[i] += cur; ans[j] += cur; } cout << accumulate(ans, ans + n, 0) / 2 << endl;; cout << *max_element(ans, ans + n) << endl;; } 이전 다음 댓글남기기
댓글남기기