5 条题解

  • 5
    @ 2021-8-7 18:41:43

    C++ :

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    typedef pair<double, double> PDD;
    const int N = 1010;
    const double eps = 1e-6, INF = 1e10; // double一般定义一个eps精确值
     
    int n, R;
    PDD segs[N];
    
    int main()
    {
        bool success = true;
        
        cin >> n >> R;
        for(int i = 0; i < n; i++)
        {
            int x, y;
            cin >> x >> y;
            if(y > R)
            {
                success = false;
                break;
            }
            double len = sqrt(R * R - y * y);
            segs[i] = {x + len, x - len}; //区间 按终点起点排序
        }
        if(!success) puts("-1");
        else
        {
            sort(segs, segs + n);
            int res = 0;
            double last = -INF; //***这里要定义double
            for(int i = 0; i < n; i++)
            {
                auto seg = segs[i];
                if(seg.second > last + eps) //seg.second 是起点
                {
                    res ++;
                    last = seg.first; // seg.first的终点
                    
                }
            }
            cout << res << endl;
        }
        return 0;
    }
    
    • 0
      @ 2026-5-30 10:11:21

      #include #include #include

      using namespace std;

      typedef pair<double, double> PDD; const int N = 1010; const double eps = 1e-6, INF = 1e10; // double一般定义一个eps精确值

      int n, R; PDD segs[N];

      int main() { bool success = true;

      cin >> n >> R;
      for(int i = 0; i < n; i++)
      {
          int x, y;
          cin >> x >> y;
          if(y > R)
          {
              success = false;
              break;
          }
          double len = sqrt(R * R - y * y);
          segs[i] = {x + len, x - len}; //区间 按终点起点排序
      }
      if(!success) puts("-1");
      else
      {
          sort(segs, segs + n);
          int res = 0;
          double last = -INF; //***这里要定义double
          for(int i = 0; i < n; i++)
          {
              auto seg = segs[i];
              if(seg.second > last + eps) //seg.second 是起点
              {
                  res ++;
                  last = seg.first; // seg.first的终点
                  
              }
          }
          cout << res << endl;
      }
      return 0;
      

      }

      • 0
        @ 2025-2-22 11:49:35
        #include<bits/stdc++.h>
        using namespace std;
        int n,d,ans;
        struct node
        {
            double x,y;
            bool vis=0;
        }a[1010];  //存值
        bool cmp(node p,node q)  //sort的比较函数
        {
            return p.y<q.y;
        }
        int main()
        {
            cin>>n>>d;
            for(register int i=0;i<n;i++)
            {
                double p,q,m;
                cin>>p>>q;
                if(q>d){cout<<-1;return 0;}
                m=sqrt(d*d-q*q);
                a[i].x=p-m,a[i].y=p+m;  //读入处理
            }
            sort(a,a+n,cmp);  //排序
            for(int i=0;i<n;i++)  //挨个循环
            {
                if(a[i].vis)continue;
                ans++;  //累加雷达数量
                a[i].vis=1;  //标记为已经被雷达扫过
                for(int j=0;j<n;j++)
                    if(!a[j].vis&&a[i].y>=a[j].x)a[j].vis=1;  //标记范围内的所有点
            }
            cout<<ans;  //输出所需雷达数量
            return 0;  //完美结束
        }
        
        • 0
          @ 2024-6-15 19:57:51
          #include <cstring>
          #include <string.h>
          #include <queue>
          #include <stack>
          #include <map>
          #include<iostream>
          using namespace std;
          int main(){
          for (int i = 1;i <= 514514;i++)
          { 
              cout<<"11111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; 
          }
               return 0;  
          }
          

          AC

        • 0
          @ 2023-1-24 20:53:45
          #include<iostream>
          #include<cstdio>
          #include<cstring>
          #include<algorithm>
          #include<cmath>
          using namespace std;
          
          const int N=1010;
          int n,d;
          struct Segment
          {
              double l,r;
              bool operator < (const Segment& t) const
              {
                  return r<t.r;
              }
          }seg[N];
          int main()
          {
              cin>>n>>d;
              bool failed=false;
              for(int i=0;i<n;i++)
              {
                  int x,y;
                  cin>>x>>y;
                  //将平面问题转化到横轴上的一个个区间
                  if(y>d) failed=true;   //如果比半径大,直接fail
                  else
                  {
                      double len=sqrt(d*d-y*y);
                      seg[i].l=x-len,seg[i].r=x+len; //区间左端点l,区间右端点r       
                  }
              }
              if(failed)
                  puts("-1");
              else
              {
                  sort(seg,seg+n);
                  int cnt=0;
                  double last=-1e20;  //last表示上一个区间的右端点
                  for(int i=0;i<n;i++)
                  {
                      if(last<seg[i].l)   
                      {
                          cnt++;  //若下一个区间左端点比上一个区间的右端点小,那么就要再新加一个圆
                          last=seg[i].r;  //更新
                      }
                  }
                  cout<<cnt;
              }
          
              getchar();getchar();
              return 0;
          }
          
          

          ~111~ ~定过~

          • 1

          信息

          ID
          24
          时间
          1000ms
          内存
          128MiB
          难度
          1
          标签
          递交数
          177
          已通过
          123
          上传者