Cắt giấy (C.P.VNOI 2021 LMH R6)

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: 2000 Thời gian: 1.0s Bộ nhớ: 488M Input: bàn phím Output: màn hình

Cho một mảnh giấy hình vuông kích thước \(2^n \times 2^n\), người ta tiến hành gấp mảnh giấy này theo hai bước:

  • Bước 1: Gấp theo đường nằm dọc chính giữa song song với cạnh tờ giấy sao cho mép trái chồng lên mép phải
  • Bước 2: Gấp theo đường nằm ngang chính giữa song song với cạnh tờ giấy sao cho mép dưới chồng lên mép trên

Thực hiện liên tiếp các phép gấp như vậy cho tới khi kích thước của mảnh giấy còn lại là \(2^k \times 2^k\) \((k \leq n)\). Mảnh giấy còn lại này được chia thành lưới ô vuông đơn vị và đánh số các hàng ô từ trên xuống dưới từ 1 tới \(2^k\), các cột ô từ trái qua phải từ 1 tới \(2^k\), ô ở hàng \(i\), cột \(j\) gọi là ô \((i,j)\). Cuối cùng người ta đục bỏ đi \(m\) ô của mảnh giấy đã gấp và mở tờ giấy lại như cũ.

Yêu cầu: Cho biết mảnh giấy ban đầu bị tách rời thành bao nhiêu mảnh? (Một mảnh là một miền liên thông các ô kề cạnh không bị đục bỏ).

Input

  • Dòng 1 chứa ba số nguyên dương \(n, k, m\) \((n \leq 30; k \leq 10; m \leq 2^k \times 2^k)\)
  • \(m\) dòng tiếp theo, mỗi dòng chứa chỉ số hàng và chỉ số cột của một ô bị đục bỏ

Output

  • Ghi ra một số duy nhất là số mảnh tính được

Example

Test 1

Input
3 2 5
1 2
2 2
3 2
4 2
3 1
Output
5

Bình luận

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

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