1016: 加油站

没有想到倒着贪心
注意我这里其实可以没等输入完就可以判断会不会无解
但是这样会导致我没有吃完本组输入样例,以至于我输出超限50%

#include <bits/stdc++.h>
using namespace std;
int n,k;
const int N=5010;
int dist[N];
int main(){
	while(scanf("%d%d",&n,&k)!=EOF){
		int sum=0;
		int cnt=0;
		bool flag=1;
		for(int i=1;i<=k+1;i++){
			scanf("%d",&dist[i]);  //从第i-1个加油站前往第i个加油站的距离 
			if(flag){
			if(dist[i]>n){   
				printf("NoSolution\n");
				flag=0;
				continue; 
			}
			sum+=dist[i];
			if(sum<n){     //说明从上一次加油地点到开到第i个加油站前不用加油 
				continue;
			}else if( sum==n){	//开到第i个加油站时加一次油  
				sum=0;
				if(i!=k+1)		//万一开到了终点站,那其实还是不用加油 
					cnt++;
			}else{
				sum=dist[i];   //第i-1个加油站加油 (因为第一个if的存在,所以不可能出现在第0个加油站加油的情况. 
				cnt++;
			}
		}
		}
		if(flag)
			printf("%d\n",cnt);
	}
}
posted @ 2026-03-14 19:45  peter_shen  阅读(8)  评论(0)    收藏  举报