Problem
https://vn.spoj.com/problems/VECTOR
https://oj.vnoi.info/problem/VECTOR
Trong mặt phẳng tọa độ có N
véc tơ. Mỗi một véc tơ được cho bởi hai chỉ số x
và y
. Tổng của hai véc tơ (xi, yi)
và (xj, yj)
được định nghĩa là một véc tơ (xi + xj, yi + yj)
. Bài toán đặt ra là cần chọn một số véc tơ trong N
véc tơ đã cho sao cho tổng của các vec tơ đó là véc tơ (U, V)
.
Yêu cầu: Đếm số cách chọn thoả mãn yêu cầu bài toán đặt ra ở trên.
- Dòng thứ nhất ghi số
N
(0 ≤ N ≤ 30
). N
dòng tiếp theo, dòng thứ i
ghi các số nguyên xi, yi
lần lượt là hai chỉ số của véc tơ thứ i
. (|xi|, |yi| ≤ 100
).- Dòng cuối cùng ghi số hai số nguyên
U V
(|U|, |V| ≤ 10^9
).
Output
Gồm một số duy nhất là số cách chọn thoả mãn.
Example
Input
4
0 0
-1 2
2 5
3 3
2 5
Output
4
Tutorial
Chia tập vector ban đầu thành 2 tập con, mỗi tập N/2
(~15
vectors). Với mỗi tập, sinh tất cả các vector có thể hình thành, do đó mỗi tập có khoảng 2^15 = 32K
cách chọn.
Dựa trên 2 tập đã sinh, gọi là A
và B
, duyệt theo tập A
, với mỗi vector sinh được từ tập A
, chặt nhị phân trên tập B
để tìm số cách sinh được phần còn lại của vector.
Độ phức tạp O(2^15 * 15)
Submission
Nếu bạn thấy bài viết này hay, hãy share bài viết này cho mọi người nhé 😉.
Share this post →