一道贪心水题,思想就是从最左边的点开始,距离为r以内的最远的点为标记点,然后不断重复着过程。
1 1 // 2 2 // main.cpp 3 3 // poj 3069 4 4 // 5 5 // Created by dada on 2017/2/15. 6 6 // Copyright © 2017年 dada. All rights reserved. 7 7 // 8 8 9 9 #include<iostream> 10 10 #include<algorithm> 11 11 12 12 using namespace std; 13 13 14 14 int main() 15 15 { 16 16 int num[1005]; 17 17 int r,n; 18 18 while(cin>>r>>n,r!=-1||n!=-1) 19 19 { 20 20 for(int i = 0; i < n; i++) 21 21 cin>>num[i]; 22 22 sort(num,num+n); 23 23 int ans=0,pos=-1; 24 24 for(int i = pos+1; i < n; i = pos+1) 25 25 { 26 26 int j,k; 27 27 for(j = i; j < n; j++) 28 28 { 29 29 if(num[j]<=num[i]+r) 30 30 pos=j; 31 31 else 32 32 break; 33 33 } 34 34 j--; 35 35 for(k = pos; k < n; k++) 36 36 { 37 37 if(num[k]<=num[j]+r) 38 38 pos=k; 39 39 else 40 40 break; 41 41 } 42 42 ans++; 43 43 } 44 44 cout<<ans<<endl; 45 45 } 46 46 return 0; 47 47 }