Bài 5.1. Phân Tích Chuỗi Nhiệt Độ - [Độ khó: Khá]
Bài 5.1. Phân Tích Chuỗi Nhiệt Độ - [Độ khó: Khá]
Bạn là một nhà khoa học môi trường được giao nhiệm vụ phân tích dữ liệu nhiệt độ từ một phòng thí nghiệm đặc biệt. Phòng thí nghiệm này cần duy trì nhiệt độ ổn định để thực hiện các thí nghiệm nhạy cảm. Bạn được cung cấp một chuỗi dữ liệu nhiệt độ hàng ngày và cần tìm ra hai thông tin quan trọng:
- Độ dài của chuỗi ngày liên tiếp dài nhất mà nhiệt độ duy trì trên một ngưỡng nhất định.
- Tổng số lần xuất hiện của các chuỗi ngày liên tiếp mà nhiệt độ duy trì trên ngưỡng nhất định, kể cả các chuỗi chỉ dài một ngày.
Đây là một bài tập thực tế giúp bạn luyện tập vòng lặp để duyệt qua dữ liệu và sử dụng các biến trạng thái để theo dõi chuỗi liên tiếp.
INPUT FORMAT
Dòng đầu tiên chứa hai số nguyên N
và T
cách nhau bởi dấu cách.
N
(1 <= N <= 1000): Số ngày dữ liệu.T
(0 <= T <= 50): Ngưỡng nhiệt độ.
Dòng thứ hai chứa N
số nguyên temp_1, temp_2, ..., temp_N
cách nhau bởi dấu cách, là nhiệt độ của từng ngày.
temp_i
(0 <= temp_i <= 100): Nhiệt độ của ngày thứi
.
OUTPUT FORMAT
In ra hai số nguyên cách nhau bởi dấu cách trên một dòng duy nhất:
- Số thứ nhất là độ dài của chuỗi ngày liên tiếp dài nhất mà nhiệt độ trên ngưỡng
T
. - Số thứ hai là tổng số chuỗi ngày liên tiếp mà nhiệt độ trên ngưỡng
T
.
Ví dụ:
Input:
10 25
20 28 30 24 26 27 28 22 29 31
Output:
3 4
Giải thích:
Ngưỡng nhiệt độ T = 25
.
- Ngày 1 (20): Dưới ngưỡng.
- Ngày 2 (28): Trên ngưỡng. Bắt đầu chuỗi 1.
- Ngày 3 (30): Trên ngưỡng. Chuỗi 1 kéo dài.
- Ngày 4 (24): Dưới ngưỡng. Chuỗi 1 kết thúc, độ dài 2.
- Ngày 5 (26): Trên ngưỡng. Bắt đầu chuỗi 2.
- Ngày 6 (27): Trên ngưỡng. Chuỗi 2 kéo dài.
- Ngày 7 (28): Trên ngưỡng. Chuỗi 2 kéo dài.
- Ngày 8 (22): Dưới ngưỡng. Chuỗi 2 kết thúc, độ dài 3.
- Ngày 9 (29): Trên ngưỡng. Bắt đầu chuỗi 3.
- Ngày 10 (31): Trên ngưỡng. Chuỗi 3 kéo dài.
- (Kết thúc input): Chuỗi 3 kết thúc, độ dài 2.
Các chuỗi trên ngưỡng tìm được:
- Chuỗi 1:
28, 30
(độ dài 2) - Chuỗi 2:
26, 27, 28
(độ dài 3) - Chuỗi 3:
29, 31
(độ dài 2)
Độ dài chuỗi dài nhất là 3. Tổng số chuỗi là 3.
**À, có lỗi trong giải thích mẫu. Nếu 29, 31 là chuỗi thứ 3, thì tổng chuỗi là 3. Nếu là 4, có nghĩa là ngày cuối cùng 29, 31 là chuỗi thứ 4. Ah, ý của "tổng số chuỗi" là mỗi lần bắt đầu một chuỗi mới thì đếm 1. 28 -> 1, 26 -> 1, 29 -> 1.
Chỉnh lại: Chuỗi 1: 28, 30 (độ dài 2). Chuỗi 2: 26, 27, 28 (độ dài 3). Chuỗi 3: 29, 31 (độ dài 2). Tổng cộng 3 chuỗi.
Nếu output là 4, nghĩa là 28, 30; 26; 27; 28; 29; 31. Tức là từng ngày riêng lẻ.
Định nghĩa lại: "tổng số lần xuất hiện của các chuỗi ngày liên tiếp", ví dụ 26, 27, 28
được tính là một chuỗi.
Maybe the sample output wants to count the starting day of each valid streak.
Let's fix the explanation for the example:
20
(dưới 25)28
(trên 25) -> Bắt đầu một chuỗi. (count_streaks = 1
)30
(trên 25)24
(dưới 25) -> Chuỗi đầu tiên kết thúc (2 ngày: 28, 30).max_streak = 2
.26
(trên 25) -> Bắt đầu một chuỗi mới. (count_streaks = 2
)27
(trên 25)28
(trên 25)22
(dưới 25) -> Chuỗi thứ hai kết thúc (3 ngày: 26, 27, 28).max_streak = 3
.29
(trên 25) -> Bắt đầu một chuỗi mới. (count_streaks = 3
)31
(trên 25)- Kết thúc input. Chuỗi thứ ba kết thúc (2 ngày: 29, 31).
max_streak
vẫn là 3.
Kết quả: max_streak = 3
, count_streaks = 3
.
The example output 3 4
is confusing based on my interpretation.
Let's adjust the definition of "tổng số chuỗi" to match the sample.
It seems like:
- Ngày 28 (trên) -> streak 1
- Ngày 30 (trên)
- Ngày 26 (trên) -> streak 2
- Ngày 27 (trên)
- Ngày 28 (trên)
- Ngày 29 (trên) -> streak 3
- Ngày 31 (trên) This would give 3 streaks. If the output is 4, maybe 28 is a streak, 30 is not counted if it extends, but it must be counted. What if "tổng số chuỗi" means "how many days were part of a streak"? 28, 30, 26, 27, 28, 29, 31 -> 7 days. No.
Let's assume the provided example 3 4
means this:
Longest streak: 26, 27, 28
(length 3).
Total streaks:
28, 30
(length 2)26
(length 1)27
(length 1)28
(length 1)29, 31
(length 2) This interpretation is bad. My original interpretation of "total streaks" (i.e. starts of new streaks) makes more sense formedium
difficulty. Let's re-examine28 30 24 26 27 28 22 29 31
. IfT=25
:
28
: Yes. Current streak length = 1.30
: Yes. Current streak length = 2.24
: No. Streak ended. Max = max(Max, 2) = 2. Total streaks = 1. Current streak length = 0.26
: Yes. Current streak length = 1.27
: Yes. Current streak length = 2.28
: Yes. Current streak length = 3.22
: No. Streak ended. Max = max(Max, 3) = 3. Total streaks = 2. Current streak length = 0.29
: Yes. Current streak length = 1.31
: Yes. Current streak length = 2. End of input. Streak ended. Max = max(Max, 2) = 3. Total streaks = 3.
Result 3 3
.
The sample output 3 4
must imply a different counting for the second number.
Perhaps it's the number of distinct periods where the temperature was above the threshold. This would lead to the same as my "count streaks".
Could it be counting each day that is part of a streak? No, that's not 4.
What if 28 (first one) counts as 1. 30 counts as 2. 26 counts as 3. 27 counts as 4. No, that's not how "number of streaks" works.
Maybe it counts "each time we find a day above threshold and the previous day was below threshold, OR it's the first day and it's above threshold". This is exactly my count_streaks
definition.
Let's try to achieve 3 4:
20
(no)
28
(yes) -> streak 1
30
(yes) -> continues streak 1
24
(no)
26
(yes) -> streak 2
27
(yes) -> continues streak 2
28
(yes) -> continues streak 2
22
(no)
29
(yes) -> streak 3
31
(yes) -> continues streak 3
This consistently gives 3 streaks.
If the example output 3 4
is correct, the definition of the second number must be different.
Possibility: "Total number of segments where temperature was above threshold".
A "segment" could mean single day.
28 (1), 30 (1), 26 (1), 27 (1), 28 (1), 29 (1), 31 (1). Total 7 segments. No.
Let's assume the problem means "How many times a new streak starts AND each day in the streak is counted individually as a valid point". This is also not 4.
Could it be max_streak
and total_days_above_threshold
?
28+30+26+27+28+29+31
total 7 days above threshold. Not 4.
Okay, I'll stick to my initial interpretation of "count of streaks" as it's standard and sensible for "Medium" difficulty, and adjust the example output to 3 3
. The prompt asks for clear examples, so a correct, consistent one is key.
Comments