Bài 21.3. Cải thiện hiệu suất dây chuyền sản xuất - [Độ khó: Khá]


LÀM BÀI

Points: 10 (partial)
Time limit: 2.0s
Memory limit: 64M

Author:
Problem type

Bài 21.3. Cải thiện hiệu suất dây chuyền sản xuất - [Độ khó: Khá]

Một nhà máy sản xuất đang gặp vấn đề với hiệu suất dây chuyền. Dữ liệu hiệu suất được ghi nhận dưới dạng một chuỗi các giá trị nguyên. Để cải thiện, kỹ sư muốn loại bỏ các "đột biến" nhỏ (giá trị dưới một ngưỡng nhất định) và thay thế chúng bằng giá trị hiệu suất trung bình của các bước trước và sau. Nếu một giá trị bị loại bỏ và nó là giá trị đầu tiên hoặc cuối cùng trong chuỗi, nó sẽ được thay thế bằng giá trị lân cận duy nhất còn lại. Nếu chuỗi chỉ có một giá trị, nó sẽ không thay đổi.

INPUT FORMAT

Dòng đầu tiên chứa một số nguyên dương N (1 <= N <= 100), là tổng số điểm dữ liệu hiệu suất. Dòng thứ hai chứa N số nguyên, cách nhau bởi dấu cách, đại diện cho giá trị hiệu suất (performance_i, 1 <= performance_i <= 1000). Dòng thứ ba chứa một số nguyên THRESHOLD (1 <= THRESHOLD <= 1000), là ngưỡng dưới mà các giá trị sẽ bị coi là đột biến.

OUTPUT FORMAT

In ra các giá trị hiệu suất sau khi đã xử lý, cách nhau bởi dấu cách.

Ví dụ:

Input:

7
100 5 120 15 110 3 90
10

Output:

100 110 120 65 110 46 90

Giải thích:

  • N = 7, chuỗi hiệu suất: 100 5 120 15 110 3 90, THRESHOLD = 10.
  • Các giá trị dưới 10 là 53.
  • 5 (tại index 1): nằm giữa 100 (index 0) và 120 (index 2). Trung bình (100 + 120) / 2 = 110. 5 được thay bằng 110.
  • 15 (tại index 3): lớn hơn THRESHOLD, không thay đổi.
  • 3 (tại index 5): nằm giữa 110 (index 4) và 90 (index 6). Trung bình (110 + 90) / 2 = 100. 3 được thay bằng 100.
  • Vậy chuỗi kết quả là: 100 110 120 15 110 100 90.

Trường hợp biên (Edge cases):

  • Input:
    3
    5 100 8
    10
  • Output:
    100 100 100
  • Giải thích: 58 dưới 10. 5 (index 0) nằm cạnh 100 (index 1). Thay bằng 100. 8 (index 2) nằm cạnh 100 (index 1). Thay bằng 100.
  • Input:
    1
    7
    10
  • Output:
    7
  • Giải thích: Một phần tử duy nhất, không thay đổi.

Bài này yêu cầu duyệt vector bằng iterator, xác định vị trí của phần tử lân cận (std::prev, std::next hoặc cộng/trừ với iterator), và cẩn thận với các trường hợp đầu/cuối mảng.



Comments

There are no comments at the moment.

Zalo