2018.09.23 atcoder Boxes and Candies(貪心)
阿新 • • 發佈:2018-12-11
傳送門 一道挺有意思的貪心。 從1到n依次滿足條件。 注意要特判第一個數已經大於x的情況。 但是如何貪心吃呢? 如果靠左的數沒有越界,我們吃靠右的數。 原因是下一次靠右的數就會成為靠左的數,相當於多貢獻了一次。 然後貌似要開long long 程式碼:
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
ll a[N],x,ans=0;
int n;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch) )ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
n=read(),x=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=2;i<=n;++i){
if(a[i-1]+a[i]<=x)continue;
if(a[i-1]>=x)ans+=a[i-1]-x+a[i],a[i]=0;
else ans+=a[i]-(x-a[ i-1]),a[i]=(x-a[i-1]);
}
cout<<ans;
return 0;
}