Ghép Vật Phẩm

Đề bài

Mô tả

Trong một trò chơi nhập vai, các vật phẩm được chia thành hai loại: cơ bảntổng hợp. Chỉ có vật phẩm cơ bản được bán ngoài cửa hàng. Mỗi vật phẩm tổng hợp được ghép từ một số vật phẩm cơ bản theo một công thức cho trước. Khi ghép xong một vật phẩm tổng hợp, tất cả các vật phẩm cơ bản dùng làm nguyên liệu sẽ biến mất.

k người chơi, ban đầu túi đồ của mọi người đều rỗng. Bạn được cho danh sách q lần mua theo thứ tự thời gian: mỗi lần một người chơi mua đúng một vật phẩm cơ bản và cất vào túi.

Sau mỗi lần mua, nếu người chơi đó gom đủ nguyên liệu để ghép một vật phẩm tổng hợp thì người đó bắt buộc phải ghép ngay. Dữ liệu đảm bảo sau mỗi lần mua có nhiều nhất một cơ hội ghép xuất hiện. Ghép một vật phẩm tổng hợp sẽ trừ đi số lượng nguyên liệu tương ứng và cộng thêm một vật phẩm tổng hợp đó vào túi (nguyên liệu của các công thức chỉ gồm vật phẩm cơ bản, nên việc ghép không bao giờ tạo ra thêm cơ hội ghép mới).

Với mỗi người chơi, hãy cho biết cuối cùng họ đang sở hữu những vật phẩm nào và số lượng bao nhiêu.

Dữ liệu vào

  • Dòng đầu chứa 4 số nguyên k, n, m, q: số người chơi, số vật phẩm cơ bản, số vật phẩm tổng hợp, số lần mua.
  • n dòng tiếp theo, mỗi dòng là tên một vật phẩm cơ bản.
  • m dòng tiếp theo mô tả các vật phẩm tổng hợp theo định dạng:

    <Tên>: <NL 1> <SL 1>, <NL 2> <SL 2>, ... <NL X> <SL X>

    nghĩa là để ghép vật phẩm này cần <SL i> đơn vị của nguyên liệu <NL i>. Các từ cách nhau đúng một dấu cách. Mọi nguyên liệu trong công thức đều khác nhau và đều đã xuất hiện trước đó với vai trò vật phẩm cơ bản.

  • q dòng cuối, mỗi dòng gồm số hiệu người chơi ai và tên vật phẩm cơ bản mà người đó mua.

Tên các vật phẩm đều khác nhau, gồm các chữ cái Latin thường, độ dài từ 1 đến 100.

Dữ liệu ra

Gồm k khối, khối thứ i ứng với người chơi i:

  • Dòng đầu là số bi: số loại vật phẩm khác nhau mà người chơi i đang sở hữu (số lượng dương).
  • bi dòng tiếp theo, mỗi dòng gồm tên vật phẩm và số lượng, sắp xếp theo thứ tự từ điển của tên vật phẩm.

Ràng buộc

  • 1k100
  • 1n50
  • 0m50
  • 1q500
  • 1aik
  • Mọi số lượng trong công thức là số nguyên dương không vượt quá 100, số nguyên liệu X thỏa 1Xn.

Ví dụ

Input Output Giải thích
2 3 2 5
desolator
refresher
perseverance
vanguard: desolator 1, refresher 1
maelstorm: perseverance 2
1 desolator
2 perseverance
1 refresher
2 desolator
2 perseverance
1
vanguard 1
2
desolator 1
maelstorm 1
Người 1 mua desolator rồi refresher, gom đủ để ghép vanguard (cả hai nguyên liệu biến mất) nên chỉ còn vanguard 1. Người 2 mua perseverance hai lần thì ghép được maelstorm, còn mua thêm desolator một lần, nên có desolator 1 và maelstorm 1.
2 3 2 5
a
b
c
d: a 1, b 21
e: c 2
1 a
2 c
1 b
2 c
2 c
2
a 1
b 1
2
c 1
e 1
Người 1 chỉ có a 1 và b 1 vì công thức d cần tới 21 đơn vị b. Người 2 mua c ba lần: sau lần thứ hai ghép được e (mất 2 c), còn lại c 1 và e 1.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0