题目描述
在一条数轴上有N个整数点,分别是1至N。现在已经有M个警卫,第i个警卫的位置在p[i]。每个警卫都能看守一段距离K。第i个警卫能看守的范围从p[i]-K到p[i]+K。现在的问题是:至少还需要增加多少个警卫,才能使得1至N所有的整点都能被警卫看守?注意:你可以把增加的警卫放到任意需要的地方。
输入格式
第1行,一个整数N。
第2行,一个整数M。
第3行,一个整数K。
接下来有M行,第i行是一个整数p[i]。所有的警卫的位置都不会重叠。
输出格式
一个整数。c
输入/输出例子1
输入:
5
2
2
1
5
输出:
0
输入/输出例子2
输入:
26
3
3
3
19
26
输出:
2
样例解释
1 <= N <= 1000, 1 <= M <= N, 0 <= K <= N, 1 <= p[i] <= N。
具体代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,t,L;
bool p[100001];
int main()
{
cin>>n>>m>>k;
p[0]=true,p[n+1]=true;
for(int i=1;i<=m;i++)
{
cin>>t;
for(int j=t-k;j<=t+k;j++)
{
if(j<=0)continue;
p[j]=true;
}
}
t=0;
for(int i=0;i<=n+1;i++)
{
L=0;
if(!p[i])
{
while(!p[i])
{
p[i]=1,L++,i++;
}
}
t+=ceil(L*1.0/(2*k+1));
}
cout<<t;
return 0;
}
给个免费的赞呗。