Saruman's Army
这道题难就难在了理解题意//尤其是对于理解能力不好的我,今天就被一个理科生嫌弃语文差┭┮﹏┭┮
白书题解
代码
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int n,r,x[1001];
int main(){
// freopen("data","r",stdin);
while(scanf("%d%d",&r,&n)&&r!=-1&&n!=-1){
memset(x,0,sizeof(x));
for(int i=0;i<n;i++)
scanf("%d",&x[i]);
sort(x,x+n);
int i=0,ans=0;
//ans计数,技术方法和那道W水坑的题有点类似,虽然算法不同
while(i<n){
//b是没有被覆盖的最左点的位置
int b=x[i++];
while(i<n&&x[i]<=b+r)
i++;
//p是在范围之内最大距离的点,可以说是中间点
int p=x[i-1];
//再从p开始向右延申;
while(i<n&&x[i]<=p+r)
i++;
ans++;
}
printf("%d\n",ans);
}
return 0;
}
网友评论