Trượt sang phải (2048)

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Blog Lập trình thuật toán – Thuật toán qua trò chơi 4: Game 2048
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

📖 Bài giảng & lời giải: đây là Bài tập 1 trong bài giảng Thuật toán qua trò chơi 4: Game 2048 trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.

⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!

🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên

📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com


Cho một hàng gồm $n$ ô của trò chơi 2048, mỗi ô là 0 (ô trống) hoặc một lũy thừa của 2. Người chơi bấm phím → (trượt sang phải). Hãy in ra hàng sau khi trượt và gộp, cùng số điểm được cộng.

Luật trượt và gộp của 2048 (mô tả cho phím ←, các phím khác tương tự theo hướng tương ứng): trên mỗi hàng, các ô khác 0 được dồn hết về mép trái, giữ nguyên thứ tự. Xét các ô đó lần lượt từ mép trái (mép đích) đi ra: nếu hai ô liền nhau có cùng giá trị $x$ thì chúng gộp thành một ô $2x$ và người chơi được cộng $2x$ điểm. Mỗi ô chỉ được tham gia gộp nhiều nhất một lần trong một lần bấm (ô vừa gộp xong bị "khoá"), và cặp nào gần mép đích hơn thì được gộp trước. Ví dụ hàng 2 2 2 2 bấm ← thành 4 4 0 0 (+8 điểm), hàng 4 4 8 0 bấm ← thành 8 8 0 0 (+8 điểm, ô 8 mới không gộp tiếp với ô 8 cũ).

Với phím →, mép đích là mép phải: các ô dồn về bên phải và cặp gần mép phải được gộp trước.

Dữ liệu vào

  • Dòng 1: số nguyên $n$ ($1 \le n \le 2 \cdot 10^5$).
  • Dòng 2: $n$ số nguyên, mỗi số là $0$ hoặc $2^t$ với $1 \le t \le 30$.

Kết quả

  • Dòng 1: $n$ số của hàng sau khi bấm →, cách nhau một dấu cách.
  • Dòng 2: số điểm được cộng (tổng giá trị các ô mới tạo thành do gộp). Chú ý giá trị một ô có thể đạt $2^{31}$.

Sample Input

8
2 2 2 0 4 4 8 0

Sample Output

0 0 0 0 2 4 8 8 
12

Bình luận

Hãy đọc nội quy trước khi bình luận.


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