摘自挑战程序设计竞赛
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 int main(int argc, char *argv[]) 11 { 12 int l,n,a[1010],b[1010],ans; 13 while(scanf("%d%d",&l,&n)!=EOF) 14 { 15 if(l==-1&&n==-1) 16 break; 17 for(int i=0;i<n;i++) 18 { 19 scanf("%d",&a[i]); 20 } 21 sort(a,a+n); 22 int i=0,ans=0; 23 while(i<n) 24 { 25 int s=a[i++];//s是没有被覆盖的最左的点的位置 26 while(i<n&&a[i]<=s+l)//一直向右前进直到距s的距离大于L 的点 27 i++; 28 int p=a[i-1];//p是新加上标记点的位置 29 while(i<n&&a[i]<=p+l)//一直向右前进直到距p的距离大于L的点 30 i++; 31 ans++; 32 } 33 printf("%d\n",ans); 34 } 35 }