Điểm:
300 (p)
Thời gian:
1.0s
Bộ nhớ:
1023M
Input:
bàn phím
Output:
màn hình
Cho bảng kích thước \(n \times m\). Hỏi có bao nhiêu cách điền các số \(-1\) và \(1\) vào các ô trong bảng sao cho tích các số trong cùng \(1\) hàng và trong cùng \(1\) một cột bằng \(1\).
Input
- Một dòng chứa 2 số \(n, m\) (\(n, m \leq 10^9\))
Output
- In ra kết quả theo mod \(10^9+7\)
Example
Test 1
Input
2 3
Output
4
Bình luận
Spoiler Alert
Hint 1
Hint 2
Hint 3
Hint 4 (cuom1999)
Hint 5
Reference AC code | O(1) time | O(1) auxiliary space | Divide and Conquer, Math
Công thức thì đúng rồi nhưng mấy hint của em chưa rõ ràng lắm (làm sao để có được công thức). Bài này có thể giải như sau:
Nếu không kể hàng cuối và cột cuối, chúng ta còn lại bảng con \((m-1) \times (n-1)\). Có \(2^{(m-1)(n-1)}\) cách điền số cho bảng con này, do mỗi ô có 2 cách điền. Đồng thời với mỗi cách điền trên, chúng ta có đúng 1 cách điền số cho hàng cuối và cột cuối (chứng minh nhường lại bạn đọc). Vì vậy đáp số là \(2^{(m-1)(n-1)}\).
Mình xin giải thích nốt phần "nhường lại bạn đọc" trong hướng dẫn của @cuom1999 như sau:
Vì mỗi ô chỉ có một cách điền nên với mỗi cách điền vào bảng con \((m-1)(n-1)\), chúng ta có đúng 1 cách điền số cho hàng cuối và cột cuối tương ứng . Vậy ta đã chứng minh xong phần "nhường lại bạn đọc"
Một chi tiết nhỏ là ô đặc biệt \((m, n)\) ở góc dưới bên phải. Sau khi điền hết các ô màu xanh lá cây như trên (dựa theo các ô đỏ), chúng ta phải chứng minh là ô màu xanh dương chỉ có đúng 1 cách điền. Tức là tích các ô xanh lá cây trên hàng cuối = tích các ô xanh lá cây trên cột cuối. Điều này đúng vì chúng đều bằng tích các ô đỏ.
@cuom1999, bài này hay quá, mình cũng quên để ý chỗ ô \((m,n)\)
Vâng anh, em hiểu rồi ạ