Quái vật và lọ thuốc

Đề bài

Mô tả

Có một dãy gồm n ô được đánh số từ 1 đến n từ trái sang phải. Mỗi ô được mô tả bởi một số nguyên aj:

  • aj=0: ô trống.
  • aj<0: ô chứa một quái vật có máu aj.
  • aj>0: ô chứa một lọ thuốc có giá trị aj.

Trên dãy có m anh hùng, anh hùng thứ i đứng ở ô si (ô này chắc chắn trống) và có hi máu. Các vị trí si đôi một khác nhau.

Bạn cần chọn một ô tập kết (là một ô bất kỳ trong n ô, có thể là ô trống, ô có quái vật hoặc ô có lọ thuốc), rồi lần lượt điều khiển từng anh hùng đi tới ô tập kết đó. Mỗi lần chỉ một anh hùng di chuyển; khi anh hùng đó đã tới ô tập kết mới điều khiển anh hùng tiếp theo.

Trong một lần di chuyển, anh hùng đi thẳng về phía ô tập kết theo từng ô một, không được đổi hướng hay đi lùi. Khi bước vào một ô:

  • Ô trống: máu không đổi.
  • Ô có quái vật máu d: nếu máu hiện tại của anh hùng d thì anh hùng thắng, máu bị trừ đi d (anh hùng vẫn sống nếu máu về đúng 0) và quái vật biến mất, ô trở thành trống. Nếu máu hiện tại <d thì anh hùng thua và bạn thất bại.
  • Ô có lọ thuốc giá trị v: máu anh hùng được cộng thêm v, lọ thuốc biến mất, ô trở thành trống.

Mọi thay đổi của dãy được giữ nguyên qua các lượt di chuyển kế tiếp: một quái vật đã bị tiêu diệt hay một lọ thuốc đã bị uống sẽ không còn nữa. Nhiều anh hùng có thể cùng đứng ở một ô.

Hãy chọn ô tập kết và thứ tự di chuyển sao cho mọi anh hùng đều tới được ô tập kết và còn sống, hoặc cho biết điều đó là không thể.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm.
  • m dòng tiếp theo, dòng thứ i chứa sihi.
  • Dòng cuối chứa n số nguyên a1,a2,,an.

Dữ liệu ra

Nếu không tồn tại cách chọn hợp lệ, in ra một số 1.

Ngược lại, in ra:

  • Dòng đầu: chỉ số ô tập kết.
  • Dòng thứ hai: m số nguyên là thứ tự di chuyển của các anh hùng (đánh số từ 1 đến m theo thứ tự trong dữ liệu vào).

Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1n100; 1mn.
  • 1sin, các si đôi một khác nhau, mỗi ô si là ô trống.
  • 1hi106.
  • 106aj106.

Ví dụ

Input Output Giải thích
8 3
8 2
1 3
4 9
0 3 -5 0 -5 -4 -1 0
6
3 1 2
Ô tập kết là ô 6. Anh hùng 34, máu 9) đi phải: gặp quái vật 5 ở ô 5 còn 4 máu, quái vật 4 ở ô 6 còn 0 máu, sống và dọn sạch ô 5,6. Anh hùng 18, máu 2) đi trái: quái vật 1 ở ô 7 còn 1 máu, ô 6 đã trống. Anh hùng 21, máu 3) đi phải: uống lọ 3 ở ô 2 thành 6, hạ quái vật 5 ở ô 3 còn 1, phần còn lại đã trống.
8 3
1 15
5 10
8 1
0 -5 -5 -5 0 -5 -5 0
7
2 1 3
Ô tập kết là ô 7. Anh hùng 2 đi trước dọn quái vật ở ô 6,7, sau đó anh hùng 13 đi qua đường đã sạch.
3 2
1 1
3 1
0 -5000 0
-1 Ô 2 có quái vật máu 5000. Dù chọn ô tập kết nào, luôn có một anh hùng buộc phải bước qua ô 2 và bị tiêu diệt, nên không có cách nào.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0