Problem Link:http://139.129.36.234/problem.php?cid=1015&pid=1
问题 B: 加油站
时间限制: 1 Sec 内存限制: 128 MB提交: 43 解决: 9
[ 提交][ 状态][ 讨论版]
题目描述
一辆汽车加满油后可行驶 n公里。 旅途中有若干加油站。 设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。请对于给定的 n和 k个加油站位置, 计算最少加油次数。
输入
对于输入数据,其第1行有2个正整数n(1≤n≤5000)和 k(1≤k≤5000)。表示汽车加满油后可行驶 n公里,且旅途中有 k个加油站。接下来的1行中,有 k+1个整数,表示第 k个加油站与第 k-1个加油站之间的距离。第 0个加油站表示出发地,汽车已加满油。第 k+1个加油站表示目的地。
输出
数据输出一行。 如果所对应的输入数据数据可以到达, 将计算的最少加油次数输出。 如果无法到达目的地,则输出“NoSolution”。
样例输入
7 7
1 2 3 4 5 1 6 6
样例输出
4
AC code:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<map>
#include<math.h>
#include<string.h>
#include<queue>
#include<vector>
#include<set>
#define LL long long
#define exp 1e-9
#define MAXN 1000010
using namespace std;
int sta[5010];
int main( )
{
// freopen("D:\\in.txt","r",stdin);
int n,k,i,ans,cur;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(i=1;i<=k+1;i++)
{
scanf("%d",&sta[i]);
}
cur=n;
i=1;
ans=0;
if(cur<sta[1])
{
printf("NoSolution\n");
}
else
{
cur-=sta[1];
i++;
while(1)
{
if(sta[i]>cur)
{
ans++;
cur=n;
if(sta[i]>cur)
{
printf("NoSolution\n");
break;
}
else
{
cur-=sta[i];
i++;
if(i==k+2)
{
printf("%d\n",ans);
break;
}
}
}
else
{
cur-=sta[i];
i++;
if(i==k+2)
{
printf("%d\n",ans);
break;
}
}
}
}
}
return 0;
}