Bấm trái đến khi đứng yên
Xem dạng PDF📖 Bài giảng & lời giải: đây là Bài tập 5 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 hoặc một lũy thừa của 2. Người chơi bấm phím ← liên tục cho tới khi bấm thêm cũng không làm hàng thay đổi nữa (không sinh ô mới sau mỗi lần bấm).
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ũ).
Hãy in ra số lần bấm có làm thay đổi hàng, tổng số điểm nhận được, và hàng cuối cùng.
Dữ liệu vào
- Dòng 1: số nguyên $n$ ($1 \le n \le 2000$).
- Dòng 2: $n$ số nguyên, mỗi số là $0$ hoặc $2^t$ với $1 \le t \le 20$.
Kết quả
- Dòng 1: hai số nguyên: số lần bấm làm hàng thay đổi và tổng số điểm.
- Dòng 2: $n$ số của hàng cuối cùng, cách nhau một dấu cách.
Sample Input
6
2 2 4 8 0 16
Sample Output
4 60
32 0 0 0 0 0
Bình luận