Liz và Lilly đã từng là những người bạn rất thân, nhưng họđã cãi lộn và quyết định chia tay nhau. "Tôi không muốn nhìn thấy bạn nữa, tôi sẽđặt những tảng đá ởđâu đó để nếu tôi có đi đâu từ nhà, tôi cũng không bao giờ phải nhìn thấy cái bản mặt của bạn" - Cả hai đều nói.
L&L cùng sống trong một ngôi làng nhỏđược chia thành lưới ô vuông nxn. Nhà của Liz ở ô (1, 1) và nhà Lilly ở ô (n, n). Mỗi ô của lưới mang một trong 3 ký hiệu:
• ".": Vùng đất (Land) • "X": Hồ (Lake) • "*": Tảng đá (Rock)
Mỗi người có thể di chuyển từ một ô sang ô kề cạnh nếu đó là vùng đất, và khi đứng ở một ô (x, y), họ có thể nhìn thấy ô (x', y') nếu:
• Ô (x', y') là cùng hàng hoặc cùng cột với ô (x, y) • Khoảng cách từ ô (x, y) đến ô (x', y') không quá k • Không có tảng đá nào chắn tầm mắt
Cả hai đều là kẻ lười biếng, vì vậy họ chỉ muốn đặt thêm một số ít nhất các tảng đá. Đồng thời, các tảng đá phải đặt cách nhà của mỗi người một khoảng cách tối thiểu là m.
Lưu ý: Khoảng cách giữa hai ô (x1, y1) và (x2, y2) quy ước là x1 - x2 + y1 - y2
Hãy chỉ ra cách đặt các tảng đá thoả mãn yêu cầu của cả hai người
Dữ liệu: Vào từ file văn bản FAREWELL.INP
• Dòng 1: Chứa 3 số n, k, m (5 ≤ n ≤ 20; 1 ≤ k, m ≤ n) cách nhau đúng 1 dấu cách
• n dòng tiếp theo, dòng thứ i chứa n ký tự liên tiếp mà ký tự thứ j là ký hiệu ô (i, j) của lưới
Kết quả: Ghi ra file văn bản FAREWELL.OUT
• Dòng 1: Ghi số tảng đá phải đặt, trong trường hợp không có phương án thì dòng này ghi số -1 • Trong trường hợp có phương án khả thi thì n dòng tiếp theo, dòng thứ i ghi n ký tự liên tiếp mà
ký tự thứ j là ký hiệu ô (i, j) của lưới sau khi đã đặt đá. Lưu ý rằng ta vẫn dùng ký hiệu * cho những tảng đá đã có và dùng ký hiệu "#" cho những tảng đá đặt thêm
Ví dụ
FAREWELL.INP FAREWELL.OUT FAREWELL.INP FAREWELL.OUT 7 4 4 7 4 4 ... ...* ....*X. **.*.X. ...*... .XX..*. ... 2 ... ...#* ....*X. **#*.X. ...*... .XX..*. ... 8 7 3 ... .XXXXXX. .X....X. .X....X. .X....X. .X....X. .XXXXXX. ... 4 ...#.... .XXXXXX. .X....X. #X....X. .X....X# .X....X. .XXXXXX. ....#...
144. NỐI DÂY
Xét hình chữ nhật R trong hệ trục toạđộ Decattes vuông góc có các đỉnh là (0, 0); (m, 0); (m, n) và (0, n). Ta gọi một đoạn nối là một đoạn thẳng nằm trong R, độ dài 1 đơn vị mà các toạđộ của hai
đầu mút là số nguyên (dễ thấy đoạn nối chỉ có một trong hai dạng: (x, y)-(x+1, y) hoặc (x, y)-(x, y+1). Ban đầu có một vài đoạn nối được vẽ sẵn trong R. Có hai người chơi, mỗi người khi đến lượt mình được quyền vẽ ra một đoạn nối, nếu đoạn này cùng với các đoạn nối đã vẽ khép kín thêm
được một ô vuông đơn vị nào đó thì người chơi sẽđược chiếm các (1 hoặc 2) ô vuông này và phải tiếp tục các thao tác như trên cho tới khi :
• Hoặc tất cả các đoạn nối đã được vẽ⇒ trò chơi kết thúc
• Hoặc vẫn còn đoạn nối chưa vẽ nhưng bước nối cuối cùng không chiếm được thêm ô vuông đơn vị nào, trò chơi sẽđược tiếp tục với người kia bằng luật chơi tương tự
Giả sử chương trình của bạn tham gia trò chơi với vai trò người đi trước, người kia là một chương trình khác. Hãy lập trình thể hiện chiến thuật chơi sao cho tới khi trò chơi kết thúc, số ô chương trình của bạn chiếm được là nhiều nhất có thể.
Dữ liệu: Vào từ file văn bản CELLS.INP • Dòng 1: Chứa hai số m, n (1 ≤ m, n ≤ 100)
• Các dòng tiếp, mỗi dòng ghi 4 số x1, y1, x2, y2 thể hiện một đoạn nối đã vẽ sẵn: (x1, y1)-(x2, y2)
Kết quả mỗi lượt đi của bạn phải ghi vào file văn bản PLAYER1.DAT gồm một số dòng, dòng thứ
i ghi 4 số x1(i), y1(i), x2(i), y2(i) tượng trưng cho đoạn nối (x1(i), y1(i)) - (x2(i), y2(i)) là đoạn nối thứ i trong lượt đi.
Chương trình của bạn phải khai báo sử dụng thư viện CELLS.TPU, sau mỗi lượt đi, khi đã tạo file PLAYER1.DAT, bạn phải gọi thủ tục InterChange của thư viện này để nhận được file văn bản PLAYER2.DAT có khuôn dạng như PLAYER1.DAT chứa các thông tin về lượt đi của máy tiếp theo lượt đi của bạn. Lưu ý rằng trong bất kỳ trường hợp nào trò chơi kết thúc (sau lượt đi của bạn hay của máy), thủ tục InterChange cũng sẽ dừng chương trình tức khắc để thống kê số ô chiếm
được của hai bên.
X X X X X X
O O O O O O O O start Player 1 player 2
CELLS.INP PLAYER1.DAT PLAYER2.DAT 3 3 3 3 0 0 0 1 0 0 1 0 1 0 2 0 1 2 1 3 2 2 2 3 3 2 3 3 2 1 3 1 3 1 3 2 2 0 2 1 1 0 1 1 0 1 1 1