您的位置:首页 > 其它

VK Cup 2018 - Round 2 C - Riverside Curio 贪心

2018-03-28 14:26 459 查看
我们需要知道每天标记数目的最小值,必须要满足后一天比前一天多1 或者等于前一天的数目;
从后往前扫一遍,以保证相邻前后两天的关系;再从前往后扫一遍就能得到答案;

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;

const int maxn = 1e5 + 7;
int a[maxn], t[maxn];
int n;
ll ans = 0;

int main() {
scanf("%d", &n);
for(int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
int cur = 0;
for(int i = n-1; i >= 0; --i) {
cur--;
cur = max(cur, a[i]+1);
t[i] = cur;
}
cur = 0;
for(int i = 0; i < n; ++i) {
//cout << cur << " * " << t[i] << endl;
cur = max(cur, t[i]);
ans += (cur - a[i] - 1);
}
printf("%lld\n", ans);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: