题目链接
链接: 阿里马马与四十大盗
题目描述
解题思路
贪心加倒着前缀和
代码实现
#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int N=100005;
int a[N],s[N];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=n-1;i>=0;i--) s[i]=a[i]+s[i+1];
int ans=0;
int hp=m;
for(int i=0;i<n;i++)
{
if(a[i]==0)
{
if(hp<=0) {
cout<<"NO";
return 0;
}
else if(hp>s[i]) break;
else ans+=m-hp,hp=m;
}
else hp-=a[i];
}
ans+=n-1;
cout<<ans;
return 0;
}
总结
掌握前缀和的拓展用法,倒着前缀