#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
constexpr auto max_n = 1000;
bool compare(const std::pair<int*, int> &a, const std::pair<int*, int> &b){
return *a.first < *b.first;
}
int main()
{
int n, k, height, cost = 0, diff;
std::array<int, max_n> a = {};
std::vector<std::pair<int*, int>> v = {};
(void)scanf("%d %d", &n, &k);
v.reserve(n);
for(int i=0; i<n; ++i){
(void)scanf("%d", &a[i]);
v.emplace_back(std::make_pair(&a[i], i));
}
for(int i=n-1; i>=0; --i){
std::sort(v.begin(), v.begin()+(i+1), compare);
if(v[i].second > 0){
diff = *v[i].first - a[v[i].second - 1];
if(diff > k){
a[v[i].second - 1] += diff - k;
cost += diff - k;
}
}
if(v[i].second < n - 1){
diff = *v[i].first - a[v[i].second + 1];
if(diff > k){
a[v[i].second + 1] += diff - k;
cost += diff - k;
}
}
}
printf("%d\n", cost);
fflush(stdout);
return 0;
}
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 | #include <iostream> #include <array> #include <vector> #include <algorithm> constexpr auto max_n = 1000; bool compare(const std::pair<int*, int> &a, const std::pair<int*, int> &b){ return *a.first < *b.first; } int main() { int n, k, height, cost = 0, diff; std::array<int, max_n> a = {}; std::vector<std::pair<int*, int>> v = {}; (void)scanf("%d %d", &n, &k); v.reserve(n); for(int i=0; i<n; ++i){ (void)scanf("%d", &a[i]); v.emplace_back(std::make_pair(&a[i], i)); } for(int i=n-1; i>=0; --i){ std::sort(v.begin(), v.begin()+(i+1), compare); if(v[i].second > 0){ diff = *v[i].first - a[v[i].second - 1]; if(diff > k){ a[v[i].second - 1] += diff - k; cost += diff - k; } } if(v[i].second < n - 1){ diff = *v[i].first - a[v[i].second + 1]; if(diff > k){ a[v[i].second + 1] += diff - k; cost += diff - k; } } } printf("%d\n", cost); fflush(stdout); return 0; } |
English