#include<stdio.h>
int main(){
int n,m,count=0; //n为总路程 m为生命上限 count为途中安全点的数量
int i,j,k;
scanf("%d %d",&n,&m);
int M=m,t=n-1; // M 为当前生命
int A[n];
int B[n];
for(i=0;i<n;i++){ //输入马马的路程至A[n],并保存安全区的位置至B[n]
scanf("%d",&A[i]);
if(A[i]==0){
B[i]=i;
count++;
}
else
B[i]=-1;
}
int C[count],sum=0;
for(j=0;j<n;j++){ //算出每两个安全点之间所扣除的血量 存储在C[count]
if(B[j]!=j){
sum+=A[j];
C[j]=-1;
}
else
C[j]=sum;
}
int index=0;
for(k=0;k<n;k++){ // 模拟路径
if(C[k]!=-1){ //抵达下个安全点所扣除的血量
if(M>C[k]){
M-=C[k];
}
else {
if(m>C[k]){ //如果生命上限大于抵达下一安全点所扣的血量则 选择加血
t+=(m-M);
M=m;
}
else if(m<=C[k])
index=1;
}
}
}
if(index)
printf("NO");
else
printf("%d",t);
}
全部评论
(0) 回帖