【挑战】POJ3069 贪心
第45页。
起点是最左边的点,每次把最左边能到的最右边的那个点作为标记点,然后更新起点。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define ll long long 5 using namespace std; 6 const int N=1000+50; 7 int a[N],n,r; 8 int main(){ 9 int i,j; 10 while(scanf("%d %d",&r,&n),!(r==-1&&n==-1)){ 11 for(i=0;i<n;i++){ 12 scanf("%d",&a[i]); 13 } 14 sort(a,a+n); 15 int ans=0,s,p; 16 for(i=0;i<n;){ 17 s=a[i++]; 18 //向右前进直到距s大于r的点 19 while(i<n&&a[i]<=s+r)i++; 20 p=a[i-1];//p是标记点 21 //向右前进直到距p大于r的点 22 while(i<n&&a[i]<=p+r)i++; 23 ans++; 24 } 25 printf("%d\n",ans); 26 } 27 }

浙公网安备 33010602011771号