1. 程式人生 > >2018.09.23 atcoder Boxes and Candies(貪心)

2018.09.23 atcoder Boxes and Candies(貪心)

傳送門 一道挺有意思的貪心。 從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; }