#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
ll gravel = 0;
ll n, max_diff;
cin >> n >> max_diff;
vector<ll> heights(n);
for (ll i = 0; i < n; i++)
{
cin >> heights[i];
}
bool flag_changes = true;
while (flag_changes == true)
{
flag_changes = false;
for (ll i = 0; i < n - 1; i++)
{
if (heights[i] < heights[i + 1])
{
ll add = heights[i + 1] - heights[i] - max_diff;
if (add > 0)
{
flag_changes = true;
heights[i] += add;
gravel += add;
}
}
else
{
ll add = heights[i] - heights[i + 1] - max_diff;
if (add > 0)
{
flag_changes = true;
heights[i + 1] += add;
gravel += add;
}
}
}
}
cout << gravel << endl;
}
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 | #include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(0); cin.tie(0); ll gravel = 0; ll n, max_diff; cin >> n >> max_diff; vector<ll> heights(n); for (ll i = 0; i < n; i++) { cin >> heights[i]; } bool flag_changes = true; while (flag_changes == true) { flag_changes = false; for (ll i = 0; i < n - 1; i++) { if (heights[i] < heights[i + 1]) { ll add = heights[i + 1] - heights[i] - max_diff; if (add > 0) { flag_changes = true; heights[i] += add; gravel += add; } } else { ll add = heights[i] - heights[i + 1] - max_diff; if (add > 0) { flag_changes = true; heights[i + 1] += add; gravel += add; } } } } cout << gravel << endl; } |
English