USACO 2021 - Replication

Xem PDF



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, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2400 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Sau khi xem quá nhiều video kỹ thuật "tự làm" trên mạng, Farmer John đã vô tình thả một rô-bốt có khả năng tự nhân bản vào trang trại!

Trang trại được biểu diễn bằng một lưới \(N\times N\) (\(3\le N\le 1000\)), trong đó mỗi ô hoặc trống hoặc chứa đá, và mọi ô trên biên đều chứa đá. Một số ô không có đá được đánh dấu là vị trí có thể đặt rô-bốt ban đầu.

Farmer John đặt rô-bốt ban đầu tại một trong các vị trí có thể xuất phát. Trong mỗi giờ tiếp theo, mọi bản sao của rô-bốt di chuyển phối hợp theo cùng một hướng: bắc, nam, đông hoặc tây.

Sau mỗi \(D\) giờ (\(1\le D\le 10^9\)), mọi bản sao đều nhân bản. Khi một rô-bốt tại ô \((x,y)\) nhân bản, nó tạo các bản sao mới tại \((x+1,y)\), \((x-1,y)\), \((x,y+1)\)\((x,y-1)\); rô-bốt ban đầu vẫn ở \((x,y)\). Theo thời gian, nhiều rô-bốt có thể cùng chiếm một ô.

Nếu một lần di chuyển hoặc nhân bản khiến bất kỳ rô-bốt nào đi vào ô đá, tất cả rô-bốt lập tức ngừng hoạt động. Do biên trang trại toàn là đá, cuối cùng các rô-bốt chắc chắn phải ngừng.

Hãy giúp đàn bò tìm số ô trống có thể chứa một rô-bốt tại một thời điểm nào đó.

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên \(N\)\(D\), cách nhau bởi dấu cách. Mỗi dòng trong \(N\) dòng tiếp theo chứa \(N\) ký tự. Mỗi ký tự là ., S hoặc #; .S đều biểu thị ô trống, trong đó S đánh dấu một vị trí có thể xuất phát, còn # biểu thị đá.

Mọi ký tự ở hàng đầu, hàng cuối, cột đầu và cột cuối đều là #.

Dữ liệu ra

In số ô có thể chứa một rô-bốt tại một thời điểm nào đó.

Phân nhóm

  • Các test 4-5 thỏa mãn \(D=10^9\).
  • Các test 6-8 thỏa mãn \(D=1\).
  • Các test 9-12 thỏa mãn \(N\le 100\).
  • Các test 13-20 không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
10 1
##########
#........#
#S.......#
#........#
##########
#S....S..#
##########
##########
##########
##########
Output
15
Giải thích

Trong các sơ đồ sau, x biểu thị một rô-bốt. Những vị trí có thể bị rô-bốt chiếm là:

##########
#xxx.....#
#xxxx....#
#xxx.....#
##########
#xx..xxx.#
##########
##########
##########
##########

Một chuỗi sự kiện có thể xảy ra như sau: FJ đặt rô-bốt tại vị trí xuất phát trên cùng bên trái; rô-bốt đi sang phải một ô; rô-bốt nhân bản; tất cả rô-bốt đi sang phải một ô. Lần nhân bản tiếp theo sẽ khiến một bản sao đi vào đá nên quá trình kết thúc.

##########    ##########    ##########    ##########
#........#    #........#    #.x......#    #..x.....#
#x.......#    #.x......#    #xxx.....#    #.xxx....#
#........#    #........#    #.x......#    #..x.....#
########## -> ########## -> ########## -> ##########
#........#    #........#    #........#    #........#
##########    ##########    ##########    ##########
##########    ##########    ##########    ##########
##########    ##########    ##########    ##########
##########    ##########    ##########    ##########

Ví dụ 2

Input
10 2
##########
#.#......#
#.#......#
#S.......#
#.#......#
#.#......#
##########
##########
##########
##########
Output
28
Giải thích

Những vị trí có thể bị rô-bốt chiếm là:

##########
#x#.xxx..#
#x#xxxxx.#
#xxxxxxxx#
#x#xxxxx.#
#x#.xxx..#
##########
##########
##########
##########

Ví dụ 3

Input
10 2
##########
#.S#.....#
#..#.....#
#S.......#
#..#.....#
#..#.....#
##########
##########
##########
##########
Output
10
Giải thích

Những vị trí có thể bị rô-bốt chiếm là:

##########
#xx#.....#
#xx#.....#
#xxx.....#
#xx#.....#
#x.#.....#
##########
##########
##########
##########

Nguồn

USACO 2020 December Contest, Gold - Replication: https://usaco.org/index.php?page=viewproblem2&cpid=1065

Tác giả: Benjamin Qi.

Bình luận

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

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

Kỳ thi: