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);
}
}

浙公网安备 33010602011771号