trang chủ / bài tập / containers

Dima và các cấu trúc

Đề bài

Mô tả

Bạn có ba cấu trúc dữ liệu: một ngăn xếp (stack), một hàng đợi (queue) và một hàng đợi hai đầu (deck). Ban đầu cả ba đều rỗng.

n lệnh được đưa ra lần lượt, mỗi lệnh thuộc một trong hai loại:

  1. Thêm một số a vào một trong các cấu trúc. Bạn được chọn đúng một trong bốn cách:

    • pushStack: thêm a vào cuối ngăn xếp;
    • pushQueue: thêm a vào cuối hàng đợi;
    • pushFront: thêm a vào đầu deck;
    • pushBack: thêm a vào cuối deck.
  2. Lấy ra: bạn thực hiện lấy phần tử từ nhiều nhất ba cấu trúc khác nhau, cộng dồn các số lấy được vào tổng điểm, rồi làm rỗng cả ba cấu trúc. Mỗi cách lấy như sau:

    • popStack: lấy phần tử ở cuối ngăn xếp;
    • popQueue: lấy phần tử ở đầu hàng đợi;
    • popFront: lấy phần tử ở đầu deck;
    • popBack: lấy phần tử ở cuối deck.

Trong một lệnh lấy ra, bạn không được lấy từ một cấu trúc rỗng, và không được lấy hai lần từ cùng một cấu trúc. Lưu ý popFront và popBack đều thao tác trên deck, nên trong cùng một lệnh lấy ra chỉ được dùng tối đa một trong hai.

Biết trước toàn bộ dãy lệnh, hãy đưa ra dãy hành động sao cho tổng điểm lấy được là lớn nhất. Nếu có nhiều phương án cùng đạt tổng lớn nhất, in ra phương án nào cũng được.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n: số lệnh.
  • n dòng tiếp theo, mỗi dòng một số nguyên mô tả một lệnh:
    • số a (1a105): lệnh thêm số a;
    • số 0: lệnh lấy ra.

Dữ liệu ra

In ra n dòng, mỗi dòng ứng với một lệnh vào theo thứ tự:

  • Với lệnh thêm: in đúng một trong bốn từ pushStack, pushQueue, pushFront, pushBack.
  • Với lệnh lấy ra: in số nguyên k (0k3) là số phần tử lấy ra, sau đó là k từ (cách nhau bởi dấu cách), mỗi từ thuộc popStack, popQueue, popFront, popBack.

Ràng buộc

  • 1n105
  • Mỗi lệnh là 0 hoặc một số nguyên a với 1a105.

Ví dụ

Input Output Giải thích
10
0
1
0
1
2
0
1
2
3
0
0
pushStack
1 popStack
pushQueue
pushStack
2 popStack popQueue
pushFront
pushQueue
pushStack
3 popStack popQueue popFront
Bốn lệnh lấy ra thu về 0, 1, 1+2=3, 1+2+3=6; tổng =10. Lần lấy đầu tiên các cấu trúc rỗng nên k=0.
4
1
2
3
0
pushFront
pushQueue
pushStack
3 popStack popQueue popFront
Thêm 1,2,3 vào ba cấu trúc khác nhau rồi lấy cả ba, tổng =6.

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