#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) 回帖