[2016-03-23][POJ][3069][Saruman's Army]

  • 时间:2016-03-23 18:17:43 星期三

  • 题目编号:[2016-03-23][POJ][3069][Saruman’s Army]

  • 题目大意:在数轴上n个点放半径为r的圆,要求所有点被覆盖,问至少需要多少元

  • 分析:用两个for,第一个for找到圆左边一般能覆盖的点,第二个for求圆后面一般能覆盖的点,这些区域的点放一个圆

  1. #include <algorithm>
  2. #include <cstdio>
  3. using namespace std;
  4. int a[1000 + 10];
  5. int main(){
  6. int r,n;
  7. while(~scanf("%d%d",&r,&n) && (~n||~r)){
  8. for(int i = 0 ; i < n ;++i){
  9. scanf("%d",a+i);
  10. }
  11. int prepos,ans = 0;
  12. sort(a,a+n);
  13. for(int i = 0; i < n ;){
  14. prepos = a[i];
  15. while(i < n && a[i] - prepos <= r) ++i;
  16. ++ans;
  17. prepos = a[i - 1];
  18. while(i < n && a[i] - prepos <= r) ++i;
  19. }
  20. printf("%d\n",ans);
  21. }
  22. return 0;
  23. }


来自为知笔记(Wiz)


posted on 2016-03-23 18:36  红洋  阅读(111)  评论(0)    收藏  举报

导航