35 lines
778 B
C++
35 lines
778 B
C++
#include <stdio.h>
|
|
int* stairs = NULL;
|
|
bool* visited = NULL;
|
|
int M, K, H;
|
|
long long total = 0;
|
|
|
|
int dfs(int start) {
|
|
if (visited[start]) {
|
|
return 0;
|
|
}
|
|
visited[start] = true;
|
|
for (int i = 1; start + i < M && i <= K; i++) {
|
|
if (((stairs[start + i] - stairs[start]) < 0 ? stairs[start] - stairs[start + i] : stairs[start + i] - stairs[start]) <= H) {
|
|
total++;
|
|
dfs(start + i);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main() {
|
|
scanf("%d %d %d", &M , &K, &H);
|
|
stairs = new int[M];
|
|
visited = new bool[M];
|
|
for (int i = 0; i < M ; i++) {
|
|
scanf("%d", &stairs[i]);
|
|
}
|
|
for (int i = 0; i < M; i++) {
|
|
if (!visited[i]) {
|
|
dfs(i);
|
|
}
|
|
}
|
|
printf("%lld\n", total);
|
|
return 0;
|
|
} |