GHÉT NHAU NÉM ĐÁ

Một phần của tài liệu 150 bai tap toan tin (Trang 154 - 156)

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 vng 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 ơ vng đơ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 ơ vng đơ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ó khn 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

Một phần của tài liệu 150 bai tap toan tin (Trang 154 - 156)

Tải bản đầy đủ (PDF)

(165 trang)