# 雷达 - 第二课:贪心算法 - 区间覆盖 / 字典序 - 2020 最新版提高组初级课程

题目链接

# 思路

用勾股定理求出区间

转化成区间覆盖问题

# 代码

#include <bits/stdc++.h>
using namespace std;
struct jgt
{
  int x,y;
  double z;
} a[100010];
bool cmp(jgt a,jgt b) {
  return a.z<b.z;
}
int n,d,ans=1;
int main()
{
  cin>>n>>d;
  bool flag=false;
  for(int i=1;i<=n;i++) {
    cin>>a[i].x>>a[i].y;
    //cout<<a[i].x<<" "<<a[i].y<<endl;
    if(a[i].y>d||a[i].y<(-1*d)) {
      flag=true;
    }
    a[i].z=a[i].x+sqrt(d*d-a[i].y*a[i].y);
  }
  if(flag) {
    cout<<-1<<"\n";
    return 0;
  }
  sort(a+1,a+n+1,cmp);
  double tmp=a[1].z;
  for(int i=2;i<=n;i++) {
    if((a[i].x-tmp)*(a[i].x-tmp)+a[i].y*a[i].y>d*d) { 
      ans++;
      tmp=a[i].z;
    }
  }
  cout<<ans<<"\n";
  return 0;
}