Đếm cặp

Xem PDF



Tác giả:
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, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 900 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: DCAP.INP Output: DCAP.OUT

Cho \(n\) điểm trên mặt phẳng tọa độ \(Oxy\). Lấy hai điểm bất kỳ trong số \(n\) điểm này (tạm gọi là \(A\)\(B\)), ta cần biết liệu trung điểm của đoạn thẳng \(AB\) có phải là một điểm nguyên hay không. Nếu xét tất cả cặp điểm, có bao nhiêu trung điểm như thế?

Nhắc lại, điểm \((x, y)\) là điểm nguyên nếu cả hoành độ \(x\) và tung độ \(y\) đều là số nguyên.

Yêu cầu: Đếm trong \(n\) điểm cho trước, có bao nhiêu cặp tạo ra một đoạn thẳng có trung điểm là điểm nguyên.

Input

  • Dòng đầu tiên chứa số nguyên dương \(n\) (\(n \leq 10^5\)).
  • Dòng thứ \(i\) trong \(n\) dòng tiếp theo chứa hai số nguyên \(x_i, y_i\) (\(|x_i|, |y_i| \leq 10^8\)).
  • Dữ liệu vào đảm bảo không có hai điểm nào có cùng tọa độ.

Output

  • Dòng duy nhất chứa một số nguyên dương – kết quả bài toán – số lượng cặp đếm được.

Example

Test 1

Input
3
0 0
1 1
2 2
Output
1
Note
  • Cặp điểm \((0, 0)\)\((1, 1)\) có trung điểm \((0.5, 0.5)\)
  • Cặp điểm \((0, 0)\)\((2, 2)\) có trung điểm \((1, 1)\)
  • Cặp điểm \((1, 1)\)\((2, 2)\) có trung điểm \((1.5, 1.5)\)

Trong các trung điểm được tạo ra, chỉ có 1 điểm \((1, 1)\) là điểm nguyên.

Scoring

  • 25% số điểm tương ứng với \(n = 2\).
  • 25% số điểm khác tương ứng với \(n \leq 10^3\).
  • 25% số điểm khác tương ứng với \(n \leq 10^5\) và tất cả các điểm cùng nằm trên một đường thẳng; đường thẳng này song song với một trong hai trục tọa độ.
  • 25% số điểm còn lại không có ràng buộc gì thêm.

Bình luận (7)

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