Chocolates
time limit per test 2 seconds
memory limit per test 256 megabytes
题目链接http://codeforces.com/contest/1139/problem/B
题目大意: 有n种巧克力,每种a[i]个,从最后一种巧克力开始选,前一种的数目要小于后一种的数目,问最多能买到多少个巧克力。
这题我们直接让前一个数等于后一个数-1就好了,然后判断是否该数小于后一个数-1,如果是,我们就直接+原本的数就好了,否则我们令他为上一个数-1:
if (a[i]>=a[i+1]) {
if (!a[i+1]) break;
ans+=a[i+1]-1;
a[i]=a[i+1]-1;
}
else ans+=a[i];
然后ans就是我们要的答案了。
以下是详细代码:
#include <cstdio>
#define ll long long
ll a[200020];
int main()
{
int n;
scanf ("%d",&n);
for (int i=1; i<=n; i++){
scanf ("%lld",&a[i]);
}
ll ans=a[n];
for (int i=n-1; i>=1; i--){
if (a[i]>=a[i+1]) {
if (!a[i+1]) break;
ans+=a[i+1]-1;
a[i]=a[i+1]-1;
}
else ans+=a[i];
}
printf ("%lld\n",ans);
return 0;
}