canuc80k1101·2/50

Những Mảnh Giấy Hai Màu

Nộp bài trên LQDOJ

Bài 11 · Divide and Conquer

Một tờ giấy vuông gồm ô. Mỗi ô có màu trắng, ký hiệu , hoặc màu xanh, ký hiệu .

Ta xử lý một vùng vuông theo quy tắc sau:

  • Nếu mọi ô trong vùng cùng màu, giữ nguyên vùng đó như một mảnh giấy.
  • Nếu vùng có cả hai màu, chia nó thành bốn hình vuông bằng nhau rồi áp dụng lại quy tắc cho từng phần.

Hãy đếm số mảnh trắng và số mảnh xanh khi quá trình kết thúc.

Input

  • Dòng đầu chứa số nguyên .
  • dòng tiếp theo, mỗi dòng chứa số thuộc tập .

Output

  • Dòng thứ nhất in số mảnh trắng.
  • Dòng thứ hai in số mảnh xanh.

Constraints

  • .
  • là một lũy thừa của .

Scoring

  • Subtask ( điểm): .
  • Subtask ( điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

4
0 0 1 1
0 0 1 1
1 1 0 0
1 1 0 1

Output

4
3

Giải thích: Ba phần tư đầu tạo lần lượt một mảnh trắng, một mảnh xanh và một mảnh xanh; phần tư cuối phải chia tiếp thành ba mảnh trắng và một mảnh xanh. Tổng cộng có mảnh trắng và mảnh xanh.

Lời giải tóm tắt
  • Ý tưởng: Dùng tổng tiền tố số ô màu xanh để kiểm tra một vùng đồng nhất trong O(1), rồi chia vùng chưa đồng nhất thành bốn phần tư.
  • Thuật toán: 1. Lập tổng tiền tố của các ô màu xanh. 2. Với vùng (x,y,size), lấy số ô xanh trong O(1). 3. Nếu số đó bằng 0 hoặc size², tăng bộ đếm phù hợp. 4. Ngược lại gọi bốn phần tư.
  • Chứng minh tính đúng đắn: Mỗi lời gọi xử lý đúng một vùng. Vùng đồng nhất tạo đúng một mảnh. Vùng không đồng nhất được bốn phần tư rời nhau phủ kín; theo quy nạp, tổng kết quả của bốn lời gọi con chính là kết quả của vùng cha.
  • Độ phức tạp: Tạo tổng tiền tố O(N^2); mỗi nút của cây chia được xét O(1), tổng thời gian O(N^2), bộ nhớ O(N^2).