JOI 2007 - Lines

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1800 (p) Thời gian: 5.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho \(N\) đường thẳng \(\ell_1,\ell_2,\ldots,\ell_N\) trên mặt phẳng. Hãy tính số miền mà chúng chia mặt phẳng thành. Các đường thẳng được cho có thể trùng nhau.

Chẳng hạn, xét năm đường thẳng trong đó \(\ell_1\) song song với \(\ell_2\), ba đường \(\ell_2,\ell_3,\ell_4\) đi qua cùng một điểm, các cặp đường còn lại đều cắt nhau và không có bộ ba đồng quy nào khác. Chúng chia mặt phẳng thành \(14\) miền.

Dữ liệu vào

Đọc từ đầu vào chuẩn, gồm \(N+1\) dòng:

  • Dòng đầu chứa số nguyên \(N\).
  • Dòng thứ \(i+1\) (\(1\le i\le N\)) chứa bốn số nguyên \(a_i,b_i,c_i,d_i\), phân cách bằng dấu cách. Đường thẳng \(\ell_i\) đi qua hai điểm phân biệt \(P_i=(a_i,b_i)\)\(Q_i=(c_i,d_i)\).

Mỗi đối tượng được cho là toàn bộ đường thẳng qua hai điểm, không chỉ là đoạn thẳng nối chúng.

Dữ liệu ra

Ghi ra đầu ra chuẩn số miền trên một dòng.

Ràng buộc

  • \(1\le N\le1000\).
  • \(0\le a_i,b_i,c_i,d_i\le1000\) (\(1\le i\le N\)).
  • \((a_i,b_i)\ne(c_i,d_i)\) (\(1\le i\le N\)).
  • Các đường thẳng có thể trùng nhau, song song hoặc có nhiều đường đi qua cùng một điểm.

Phân nhóm

Các bộ dữ liệu được chấm độc lập; không có điều kiện ràng buộc riêng cho từng nhóm.

  • Các bộ dữ liệu \(01\)\(10\): \(10\) điểm mỗi bộ, tổng cộng \(100\) điểm; áp dụng toàn bộ ràng buộc trên.

Ví dụ

Ví dụ 1

Input
4
0 4 6 4
0 0 6 6
1 0 1 6
0 6 6 0
Output
11
Giải thích

Bốn đường thẳng lần lượt là \(y=4\), \(y=x\), \(x=1\)\(y=6-x\). Chúng chia mặt phẳng thành \(11\) miền.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: