3 条题解

  • 1
    @ 2024-5-15 11:28:28
    n,d=map(int,input().split())
    #print(n,d)
    p=[]
    flag=True
    for i in range(n):
       x,y=map(int,input().split())
       if abs(y)>d:
           flag=False
           break
       p.append([x-(d*d-y*y)**0.5,x+(d*d-y*y)**0.5])
    if flag:
    #    print('ok')
        for i in range(n-1):
            for j in range(i,n-1):
                if p[j][0]>p[j+1][0]:
                    p[j+1],p[j]=p[j],p[j+1]
        tmp=p[0][1]
        ans=1
        for i in range(1,n):
            if p[i][0]>tmp:
                ans+=1
                tmp=p[i][1]
        print(ans)
    else:
        print("无法覆盖")
    
    • 0
      @ 2024-5-16 15:20:46

      程序思路还是很简单的,这里直接介绍代码:

      Python

      from typing import Tuple
      
      def gen_point(x: int, y: int, d: int) -> Tuple[float, float]:
          return x - ( d * d - y * y) ** 0.5, x + (d * d - y * y) ** 0.5
      
      def main() -> None:
          
          n, d = map(int, input().split())
      
          x, y = map(int, input().split())
          pre_point = gen_point(x, y, d)
          
          ans: int = 1
      
          for _ in range(n - 1):
              x, y = map(int, input().split())
              
              if y > d:
                  print("无法覆盖")
                  return
      
              point = gen_point(x, y, d)
      
              if point[0] > pre_point[1]:
                  ans += 1
              
              pre_point = point
      
          print(ans)
          return
      
      main()
      

      typing库只是3.8及以下python用来提供类型注释等的,使数据类型更好维护和更易读

      无typing纯享版

      def main():
          n, d = map(int, input().split())
      
          x, y = map(int, input().split())
          pre_point = [x - ( d * d - y * y) ** 0.5, x + (d * d - y * y) ** 0.5]
          
          ans = 1
      
          for _ in range(n - 1):
              x, y = map(int, input().split())
              
              if y > d:
                  print("无法覆盖")
                  return
      
              point = [x - ( d * d - y * y) ** 0.5, x + (d * d - y * y) ** 0.5]
      
              if point[0] > pre_point[1]:
                  ans += 1
              
              pre_point = point
      
          print(ans)
          return
      
      main()
      
      • @ 2024-5-18 11:23:04

        IIFE吓死你,反正是吓死我了。。

        from typing import Tuple
        
        def gen_point(x: int, y: int, d: int) -> Tuple[float, float]:
            return x - ( d * d - y * y) ** 0.5, x + (d * d - y * y) ** 0.5
        
        @lambda _: _()
        def main() -> None:
            
            n, d = map(int, input().split())
        
            x, y = map(int, input().split())
            pre_point = gen_point(x, y, d)
            
            ans: int = 1
        
            for _ in range(n - 1):
                x, y = map(int, input().split())
                
                if y > d:
                    print("无法覆盖")
                    return
        
                point = gen_point(x, y, d)
        
                if point[0] > pre_point[1]:
                    ans += 1
                
                pre_point = point
        
            print(ans)
            return
        
    • 0
      @ 2024-5-15 11:53:40
      n,d=map(int,input().split())
      x=[]
      y=[]
      e=[]
      flag=1
      for i in range(n):
          xi,yi=map(int,input().split())
          x.append(xi);y.append(yi)
          if yi>d:
              flag=0
              break
      if flag==0:
          print("无法覆盖")
      else:
          for i in range(n-1):
              for j in range(i+1,n):
                  if x[j]<x[i]:
                      x[i],x[j]=x[j],x[i]
                      y[i],y[j]=y[j],y[i]
          #print(x)
          #print(y)
          for i in range(n):
              flag=1
              if len(e)==0:
                  ei=(d**2-y[i]**2)**0.5+x[i]
                  e.append(ei)
              else:
                  for tot in e:
                      if (x[i]-tot)**2+y[i]**2<=d**2:
                          flag=0
                          break
                  if flag==1:
                      ei=(d**2-y[i]**2)**0.5+x[i]
                      e.append(ei)
          ans=len(e)
          print(ans)
      '''
      3 5
      6 3
      -1 4
      5 4
      '''
      
      • 1

      信息

      ID
      928
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      131
      已通过
      21
      上传者