#include <cstdio>
#include <queue>
int N, K;
int H[1000];
bool done[1000];
int najwyzszy()
{
int best_i = -1;
int max_height = -1;
for (int i=0; i<N; ++i) {
if (!done[i] && H[i] > max_height) {
max_height = H[i];
best_i = i;
}
}
return best_i;
}
int main()
{
scanf("%d%d", &N, &K);
for (int i=0; i<N; ++i) {
scanf("%d", &H[i]);
done[i] = false;
}
int zliczam = 0;
int i0;
while ((i0 = najwyzszy()) >= 0) {
int min_H = H[i0] - K;
if (i0 > 0 && H[i0-1] < min_H) {
zliczam += min_H - H[i0-1];
H[i0-1] = min_H;
}
if (i0+1 < N && H[i0+1] < min_H) {
zliczam += min_H - H[i0+1];
H[i0+1] = min_H;
}
done[i0] = true;
}
printf("%d\n", zliczam);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <cstdio> #include <queue> int N, K; int H[1000]; bool done[1000]; int najwyzszy() { int best_i = -1; int max_height = -1; for (int i=0; i<N; ++i) { if (!done[i] && H[i] > max_height) { max_height = H[i]; best_i = i; } } return best_i; } int main() { scanf("%d%d", &N, &K); for (int i=0; i<N; ++i) { scanf("%d", &H[i]); done[i] = false; } int zliczam = 0; int i0; while ((i0 = najwyzszy()) >= 0) { int min_H = H[i0] - K; if (i0 > 0 && H[i0-1] < min_H) { zliczam += min_H - H[i0-1]; H[i0-1] = min_H; } if (i0+1 < N && H[i0+1] < min_H) { zliczam += min_H - H[i0+1]; H[i0+1] = min_H; } done[i0] = true; } printf("%d\n", zliczam); } |
English