有人一道1400写了一个小时
Problem - C - Codeforces
题意:
思路:
首先先去观察样例:
很显然,对于n是奇数的情况,只有一种情况,直接操作偶数位就好了
主要是没搞清楚n是偶数的情况
其实有个小技巧,在模拟样例的时候特殊化成0和1会比较好看一点
Code:
#include <bits/stdc++.h>
#define int long long
using i64 = long long;
using namespace std;
const int N = 1e5 + 10;
int h[N];
int calc(int p) {
if (h[p] > h[p - 1] && h[p] > h[p + 1]) return 0;
else {
return max({h[p - 1], h[p + 1]}) - h[p] + 1;
}
}
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> h[i];
}
int ans = 0;
for (int i = 2; i < n; i += 2) {
ans += calc(i);
}
int res = ans;
if (n % 2 == 0) {
for (int i = n - 2; i >= 2; i -= 2) {
res -= calc(i);
res += calc(i + 1);
ans = min(ans, res);
}
}
cout << ans << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
cin >> t;
while(t --) {
solve();
}
return 0;
}