[Buổi 19][Con trỏ][HW] Bài 5: Xoay bộ đệm tại chỗ


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Xoay bộ đệm tại chỗ

Bối cảnh

Một buffer vòng chứa n mẫu dữ liệu. Sau khi đồng bộ mốc thời gian, hệ thống cần xoay buffer sang phải k vị trí: các phần tử cuối được đưa lên đầu nhưng không được cấp phát thêm một mảng thứ hai kích thước n. Vì dữ liệu được giữ trong raw dynamic array, yêu cầu là thực hiện tại chỗ bằng các thao tác swap qua pointer.

Một cách kinh điển là chuẩn hóa k %= n, đảo toàn bộ mảng, sau đó đảo riêng k phần tử đầu và n-k phần tử còn lại. Bài Homework Medium kiểm tra pointer arithmetic ở phạm vi segment: hàm reverse nhận hai pointer đầu-cuối và đổi giá trị qua dereference. Với n=0, không được thực hiện phép % n hay tạo pointer ngoài vùng hợp lệ. Sau khi xoay xong phải in dữ liệu rồi delete[] đúng lifecycle.

Yêu cầu

  1. Đọc n, k và mảng động.
  2. Xoay phải k vị trí tại chỗ, không dùng mảng phụ kích thước n.
  3. Dùng hàm reverse range với pointer.
  4. In mảng sau xoay; n=0 in dòng rỗng.
  5. Cleanup delete[].

Yêu cầu tổ chức code

Không dùng vector làm storage chính.

Online Judge chấm output. Giảng viên có thể review source code để kiểm tra việc sử dụng đúng pointer/lifetime/string pipeline theo phạm vi buổi học.

Input

Dòng 1 n k. Dòng 2 n số nếu n>0.

Output

Một dòng dãy sau xoay.

Ràng buộc

0≤n≤5000, 0≤k≤10^18.

Ví dụ 1

Input

5 2
1 2 3 4 5

Output

4 5 1 2 3

Giải thích

Với n=5,k=2, xoay phải đưa hai phần tử cuối 4 5 lên trước, kết quả mong muốn 4 5 1 2 3. Ba lần reverse tạo đúng trạng thái này: đảo cả mảng → 5 4 3 2 1; đảo 2 phần tử đầu → 4 5 3 2 1; đảo phần còn lại → 4 5 1 2 3.

Ví dụ 2

Input

4 0
10 20 30 40

Output

10 20 30 40

Giải thích

k=0 nên không cần thay đổi thứ tự. Code bỏ qua ba lần reverse và giữ nguyên 10 20 30 40. Ví dụ kiểm tra chương trình không tạo pointer a+k-1 không hợp lệ khi k bằng 0.

Thông tin học tập

  • Module: M06
  • Buổi: B19
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: raw dynamic array, pointer arithmetic, in-place reverse, rotation
  • Giới hạn kiến thức: B01-B19
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo