Bài 21.3. Cải thiện hiệu suất dây chuyền sản xuất - [Độ khó: Khá]
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à
5
và3
. 5
(tại index 1): nằm giữa100
(index 0) và120
(index 2). Trung bình(100 + 120) / 2 = 110
.5
được thay bằng110
.15
(tại index 3): lớn hơnTHRESHOLD
, không thay đổi.3
(tại index 5): nằm giữa110
(index 4) và90
(index 6). Trung bình(110 + 90) / 2 = 100
.3
được thay bằng100
.- 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:
5
và8
dưới 10.5
(index 0) nằm cạnh100
(index 1). Thay bằng100
.8
(index 2) nằm cạnh100
(index 1). Thay bằng100
. - 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