Trò chơi với robot

Trên lưới ô vuông gồm \(𝑚\) dòng và \(𝑛\) cột. Các dòng được đánh số từ 1 đến \(𝑚\) từ trên xuống dưới, các cột được đánh số từ 1 đến \(𝑛\) từ trái sang phải. Ô nằm giao giữa dòng \(𝑖\) và cột \(𝑗\) gọi là ô (\(𝑖,𝑗\)). Ban đầu, tại thời điểm 0, máy tính sẽ đặt \(𝑘\) robot trên lưới, robot thứ \(𝑟\) (\(𝑟 =1,2, … , 𝑘\)) được đặt ở ô (\(𝑥_𝑟, 𝑦_𝑟\)), các ô khác của lưới có thể đặt vật cản hoặc không. Mỗi đơn vị thời gian, người chơi phải điều khiển di chuyển một số con robot trong \(𝑘\) robot (có thể không điều khiển con nào). Robot chỉ thực hiện di chuyển sang một trong các ô kề cạnh hoặc kề đỉnh với ô robot đang đứng và ô đó không có vật cản, việc di chuyển này mất đúng một đơn vị thời gian.

Nhiệm vụ của người chơi là di chuyển để \(𝑘\) robot gặp nhau là sớm nhất, \(𝑘\) robot được gọi là gặp nhau nếu chúng cùng đứng trong một ô. Để trò chơi thêm thú vị, nếu ô (\(𝑖,𝑗\)) có vật cản thì ở thời điểm \(𝑑_{𝑖𝑗}\) vật cản sẽ biến mất và robot có thể đi vào ô (\(𝑖,𝑗\)) tính từ thời điểm \(𝑑_{𝑖j}\)

Input

  • Dòng đầu tiên chứa 3 số \(𝑚, 𝑛, 𝑘\) (\(𝑚 \times 𝑛 \leq 5000\));
  • Dòng thứ \(𝑖\) trong \(𝑚\) dòng tiếp theo chứa \(𝑛\) số nguyên, số thứ \(𝑗\) trong dòng nhận giá trị 0 mô tả ô (\(𝑖,𝑗\)) không có vật cản, hoặc -1 mô tả ô (\(𝑖,𝑗\)) có đặt robot, hoặc một số nguyên dương \(𝑑_{𝑖𝑗}\) mô tả ô (\(𝑖,𝑗\)) có vật cản và \(𝑑_{𝑖𝑗}\) là thời điểm vật cản ở ô đó biến mất (\(𝑑_{𝑖𝑗} \leq 10^9\)).

Output

  • Gồm một dòng chứa một số nguyên là thời điểm sớm nhất mà \(𝑘\) robot gặp nhau, nếu không tồn tại cách di chuyển ghi -1.

Scoring

  • Subtask \(1\) (\(25\%\) số điểm): \(𝑘 = 2\) và không có ô nào đặt vật cản;
  • Subtask \(2\) (\(25\%\) số điểm): \(𝑘 \leq 5\) và không có ô nào đặt vật cản;
  • Subtask \(3\) (\(25\%\) số điểm):\(𝑘 = 2\);
  • Subtask \(4\) (\(25\%\) số điểm): \(𝑘 \leq 5\).

Example

Test 1

Input
3 4 2
-1 0 3 0
19 9 9 0
0 0 0 -1 
Output
3
...More

Khai thác khoáng sản

Miền Trung - Tây Nguyên ngày nay là một vùng đất tiềm năng giàu khoáng sản chưa được khai thác nhiều. Một dự án khai thác mỏ sắt nơi đây dự định xây dựng \(N\) địa điểm và \(M\) con đường nối giữa các cặp điểm, các địa điểm được đánh số từ \(1\) đến \(N\), các con đường được đánh số từ \(1\) đến \(M\). Con đường thứ \(i\) có chi phí xây dựng \(C_i\), giá trị sử dụng \(V_i\) và nối địa điểm \(x_i\) với \(y_i\) cho phép đi lại theo cả hai chiều. Có thể có nhiều con đường nối cùng một cặp điểm. Có \(Q\) địa điểm đặc biệt nơi mà khoáng sắt tập trung nhiều là \(k_1, k_2, \ldots, k_Q\).

Ban quản lý dự án muốn chọn ra một số con đường để xây dựng, sao cho tổng giá trị sử dụng lớn hơn hoặc bằng $V^ * $, bảo đảm đi lại giữa \(Q\) địa điểm đặc biệt, và tổng chi phí xây dựng là càng nhỏ càng tốt. Hãy giúp họ tìm ra một phương án.

Đây là bài toán chỉ cần nộp các file kết quả đầu ra (OUTPUT-ONLY). Thí sinh được cho 20 file đầu vào tương ứng với 20 test, đối với mỗi file đầu vào thí sinh cần nộp một file kết quả đầu ra tìm được. Với mỗi file kết quả đầu ra đúng đắn, điểm của thí sinh được tính theo công thức trong phần Scoring.

Input

Thí sinh tải đầu vào tại đường dẫn: https://lqdoj.edu.vn/media/olp4ck3c.zip
Sau khi giải nén, bạn có 20 file đầu vào được đặt tên là 01.inp, 02.inp, ..., 20.inp, mỗi file mô tả một test theo định dạng:

  • Dòng đầu ghi bốn số nguyên \(N\), \(M\), \(Q\) và $V^ * $ (\(1 \leq N,M,Q \leq 1000\), \(1 \leq V^* \leq 10^9\));
  • Dòng thứ \(i\) trong số \(M\) dòng tiếp theo chứa bốn số nguyên \(x_i, y_i, C_i, V_i\) (\(1 \leq x_i, y_i \leq n\), \(1 \leq c_i, v_i \leq 10^6\));
  • Dòng tiếp theo chứa \(k_1, k_2, \ldots, k_Q\) (\(1 \leq k_i \leq n\)).

Dữ liệu bảo đảm $V^ * $ không vượt quá tổng giá trị sử dụng của tất cả các cạnh, và nếu xây dựng cả \(M\) cạnh thì luôn đảm bảo đi lại giữa \(Q\) đỉnh đặc biệt.

Output

Với file đầu vào name.inp, bạn cần xuất ra file đầu ra name.out chứa kết quả test tương ứng theo định dạng:

  • Dòng đầu ghi một số nguyên là tổng chi phí xây dựng tìm được;
  • Dòng thứ hai ghi một số nguyên \(T\) là số cạnh được xây dựng, theo sau bởi \(T\) số nguyên dương là chỉ số của các cạnh đó.

Mỗi lần nộp bài bạn có thể nộp một hoặc nhiều file đầu ra, bạn cần nén các file đầu ra này lại thành submission.zip để nộp. Ở mục chọn ngôn ngữ của trang nộp bài, chọn "Output".

Subtasks

  • Subtask 1 (\(5\) điểm): \(M \leq 20\);
  • Subtask 2 (\(5\) điểm): \(V^*=1, Q=N\);
  • Subtask 3 (\(10\) điểm): \(V^ * =1\);
  • Subtask 4 (\(15\) điểm): \(Q=N\);
  • Subtask 5 (\(65\) điểm): Không có ràng buộc gì thêm.

Examples

Test 1

Input
6 6 2 6
1 5 2 2
1 3 5 5
2 5 2 1
2 3 2 3
3 5 2 1
4 6 1 4
1 3
Output
5
3 1 5 6
Note

Có ba cạnh được xây dựng là \(1, 5, 6\); đảm bảo đi lại giữa đỉnh \(1\)\(3\). Tổng giá trị sử dụng là \(2+1+4=7 > 6\). Tổng chi phí xây dựng là \(2+2+1 = 5\).

Scoring

Đối với mỗi test, bạn sẽ bị \(0\) điểm nếu đầu ra không hợp lệ; ngược lại, gọi \(C\) là tổng chi phí xây dựng các cạnh mà bạn tìm được, Ban tổ chức có một giá trị \(J\) đối với test đó:

  • Nếu \(\frac{C}{J} < 1\) bạn được 1 điểm cho test đó;
  • Nếu \(1 \leq \frac{C}{J} \leq 2\) bạn được \((\frac{2J-C}{J})^3 \times 100\%\) số điểm cho test đó;
  • Nếu \(\frac{C}{J} > 2\) bạn được 0 điểm cho test đó.
  • Trong quá trình thi, nếu bài làm của bạn tốt hơn của ban tổ chức ở một test nào đó, kết quả này sẽ được cập nhật cho ban tổ chức và dùng để chấm điểm cho các thí sinh khác. Việc cập nhật sẽ được thực hiện nhiều lần trong suốt quá trình thi mà không có thông báo gì thêm.

Điểm của lần nộp là tổng điểm đạt được của các test. Điểm của bài là điểm lớn nhất trong số các lần nộp.

...More

Thám hiểm khảo cổ

Bình là một nhà khảo cổ học đam mê khám phá bí ẩn về các triều đại cổ xưa. Lần này Bình phát hiện ra một bản đồ chứa thông tin về một căn hầm trong lòng đất có cất giữ bí ẩn về triều đại Chăm Pa ở khu vực Miền Trung - Tây Nguyên. Vốn là một nhà khảo cổ nhiều kinh nghiệm, để giảm thiểu tối đa rủi ro trong quá trình thám hiểm, Bình quan sát cẩn thận và giải mã những chi tiết trên bản đồ trước khi tiến vào khám phá căn hầm.

Bình phát hiện ra căn hầm được cho bởi một bảng kích thước \(N\times N\) ô vuông đơn vị. Các hàng và các cột của bảng được đánh số từ \(1\) đến \(N\). Trên bảng có \(K\) viên đá thạch anh, viên thứ \(i\) \((1\le i\le K\)) được đặt tại ô \((x_i,y_i)\), có hệ số phát sóng là \(r_i\) và phát sóng theo chu kỳ với \(r_i\) trạng thái, từ \(0\) đến \(r_i-1\), nếu một thời điểm viên đá ở trạng thái \(t\) thì thời điểm tiếp theo viên đá sẽ ở trạng thái \((t+1)\)%\(r_i\). Một viên đá ở trạng thái \(t\) sẽ phủ sóng chạm tới tất cả các ô nằm trong căn hầm có khoảng cách Manhattan nhỏ hơn hoặc bằng \(t\). Khoảng cách Manhattan giữa hai ô \((x_1,y_1)\) và ô \((x_2,y_2)\) bằng giá trị \(|x_1-x_2|+|y_1-y_2|\).

Sau một thời gian nghiên cứu, Bình tiếp tục phát hiện ra lối vào căn hầm sẽ xuống trực tiếp ô \((x_s,y_s)\) và ô lưu giữ bí ẩn về triều đại Chăm Pa là ô \((x_t,y_t)\). Bình cũng tính toán được thời điểm bước vào ô \((x_s,y_s)\) giá trị trạng thái của mỗi viên thạch anh trong căn hầm. Việc di chuyển trong căn hầm là theo từng ô, mỗi bước Bình chỉ có thể bước sang một trong bốn ô kề cạnh ngang hoặc dọc hoặc đứng yên tại ô đó. Mỗi bước tương ứng với một thời điểm chuyển trạng thái của các viên thạch anh. Nếu như Bình bước vào một ô trong tầm phủ sóng của một viên thạch anh nào đó thì cửa căn hầm sẽ tự động đóng lại và Bình sẽ gặp nguy hiểm.

Để chuẩn bị cho chuyến thám hiểm một cách an toàn nhất, Bình cần giải được hai câu hỏi sau:

  1. Số lượng lớn nhất các ô bị phủ sóng tại một thời điểm bởi các viên thạch anh sau tối đa \(M\) bước là bao nhiêu?
  2. Số lượng ít nhất bước để Bình di chuyển từ ô \((x_s,y_s)\) đến ô \((x_t,y_t)\) là bao nhiêu sao cho trong quá trình di chuyển Bình không đứng vào ô đang bị phủ sóng nào?

Yêu cầu: Biết được trạng thái của từng viên thạch anh, viên thứ \(i\) \((1\le i\le K)\) là trạng thái \(t_i\), tại thời điểm Bình vào hầm tại ô \((x_s,y_s)\), hãy giúp Bình trả lời hai câu hỏi trên.

Input

  • Dòng đầu ghi bốn số nguyên dương \(Q\), \(N\), \(K\)\(M\).
  • Dòng thứ \(i\) trong số \(K\) dòng tiếp theo chứa \(4\) số nguyên dương \(x_i, y_i, r_i\)\(t_i\).
  • Dòng tiếp theo chứa hai số nguyên dương \(x_s\)\(y_s\).
  • Dòng cuối cùng chứa hai số nguyên dương \(x_t\)\(y_t\).

Các số trên cùng một dòng cách nhau bởi dấu cách.

Output

  • Nếu \(Q=1\), ghi ra một số nguyên duy nhất là số lượng lớn nhất các ô bị phủ sóng tại một thời điểm bởi các viên thạch anh sau tối đa \(M\) bước.
  • Nếu \(Q=2\), ghi ra một số nguyên duy nhất là số lượng ít nhất bước để Bình di chuyển từ ô \((x_s,y_s)\) đến ô \((x_t,y_t)\) mà không gặp nguy hiểm. Ghi ra \(-1\) nếu như không tồn tại phương án di chuyển từ ô \((x_s,y_s)\) đến ô \((x_t,y_t)\) mà Bình không gặp nguy hiểm.

Constraints

  • Tại mỗi bước di chuyển, Bình không bước ra khỏi phạm vi căn hầm \(N \times N\) ô.
  • Dữ liệu đảm bảo tại thời điểm bước vào căn hầm, Bình không gặp nguy hiểm, nghĩa là ô \((x_s,y_s)\) không bị phủ sóng bởi bất kỳ một viên thạch anh nào.
  • Có thể có trường hợp nhiều viên thạch anh được đặt cùng một ô.
  • \(Q\in \{1,2\}\).
  • \(3 \le N \le 500\).
  • \(1 \le K \le 15000\).
  • \(1\le M \le 1000\).
  • \(0 \le t_i < r_i \le 6\), \(\forall i: 1 \le i \le K\).
  • \(1 \le x_s, y_s, x_f, y_f \le N\).
  • \(1 \le x_i, y_i \le N\), \(\forall i: 1 \le i \le K\).

Scoring

  • Subtask 1 (\(27\) điểm): \(Q=1\)\(M=10\).
  • Subtask 2 (\(23\) điểm): \(Q=1\).
  • Subtask 3 (\(17\) điểm): \(Q=2\)\(r_i=1\), \(\forall i: 1\le i\le K\).
  • Subtask 4 (\(13\) điểm): \(Q=2\); \(N\le 7\)\(r_i\le 3\), \(\forall i: 1\le i\le K\).
  • Subtask 5 (\(11\) điểm): \(Q=2\); \(t_i=0\), \(\forall i: 1\le i\le K\).
  • Subtask 6 (\(9\) điểm): \(Q=2\).

Examples

Test 1

Input
1 6 3 10
2 2 4 0
6 2 2 1
4 4 3 2
1 1 
6 6
Output
26
Note

Ở test ví dụ đầu tiên, đáp án tốt nhất xuất hiện tại bước thứ 3.

Test 2

Input
2 7 2 3 
2 2 2 0
3 3 3 1
1 1
5 5
Output
10
Note

Ở test ví dụ thứ hai, chúng ta cần đi 10 bước như sau để đi đến đích:

...More

Trò chơi chặn đường

Một trò chơi trí tuệ khác mà Đan đã làm là trò chơi chặn đường. Trò chơi diễn ra trên một mê cung được biểu diễn bằng lưới ô vuông kích thước \(m \times n\), các hàng của lưới được đánh số từ \(1\) đến \(m\), các cột của lưới được đánh số từ \(1\) đến \(n\), ô nằm giao giữa hàng \(i\) và cột \(j\) được gọi là ô \((i, j)\). Mỗi ô có thể là ô cấm (ô không được phép đi vào) hoặc là ô tự do (ô có thể đi vào). Một tên cướp đang ở ô \((1, 1)\) và cần di chuyển đến ô \((m, n)\), mỗi bước tên cướp có thể di chuyển sang một trong bốn ô chung cạnh là ô tự do. Nhiệm vụ của người chơi là cần đặt cảnh sát vào một số ô tự do để chặn đường không cho tên cướp đi được đến ô \((m, n)\), tên cướp không thể di chuyển vào ô có cảnh sát. Biết rằng có một số ô tự do có thể đặt cảnh sát, ví dụ nếu ô \((i, j)\) là ô có thể đặt cảnh sát thì sẽ mất chi phí \(c_{ij}\) \((1 \leq c_{ij} \leq 9)\).

Yêu cầu: Tính chi phí ít nhất để chặn được tên cướp không di chuyển được đến ô \((m, n)\).

Input

  • Dòng đầu chứa hai số nguyên dương \(m, n\) \((m \times n > 1)\)
  • Dòng thứ \(i\) \((1 \leq i \leq m)\) trong dòng \(m\) sau, mỗi dòng chứa một xâu độ dài \(n\) , kí tự thứ \(j\) \((1 \leq j \leq n)\) chỉ gồm các loại kí tự sau:
    • Kí tự # mô tả ô tả ô là ô cấm.
    • Kí tự 1 đến 9 mô tả ô là ô tự do và có thể đặt cảnh sát với chi phí tương ứng từ \(1\) đến \(9\).
    • Kí tự . mô tả ô là ô tự do và không được phép đặt cảnh sát.

Chú ý rằng ô \((1, 1)\) và ô \((m, n)\) luôn là ô tự do không được đặt cảnh sát.

Output

  • Gồm một dòng chứa một số nguyên là chi phí ít nhất để đặt cảnh sát nhằm chặn tên cướp không di chuyển được đến ô \((m, n)\), nếu không tồn tại ghi \(-1\).

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(m \leq 2; n \leq 1000\).
  • Subtask \(2\) (\(40\%\) số điểm): \(m \times n \leq 2 \times 10^{3}\).
  • Subtask \(3\) (\(30\%\) số điểm): \(m \times n \leq 2 \times 10^{5}\).

Example

Test 1

Input
2 4
.#.1
..2.
Output
2

Test 2

Input
2 4
....
..1.
Output
-1
...More