6 条题解

  • 5
    @ 2023-2-20 10:05:31

    data=list(map(int,input().strip().split()))

    a,b=map(int,input().split())

    L=0

    R=len(data)-1

    while L<=R:

    m=(L+R)//2
    
    if data[m]>b:
        
        L=m+1
    
    else:
        
        R=m-1
    

    x=L

    L=0

    R=len(data)-1

    while L<=R:

    m=(L+R)//2
    
    if data[m]<a:
        
        R=m-1
    
    else:
        
        L=m+1
    

    y=R

    if y>=x:

    for i in range(y,x-1,-1):
        
        print(data[i],end=' ')
    
    print()
    
    print(y-x+1)
    

    else:

    print(-1)
    
    • 2
      @ 2024-5-23 14:23:18
      data=list(map(int,input().strip().split()))
      a,b=map(int,input().split())
      
      def first(key):
          i=0;j=len(data)-1
          while i<=j:
              m=(i+j)//2
              if data[m]<=key:
                  j=m-1#找到key时,任选则向左走(找到第一个key)
              else:
                  i=m+1
          return i#所以,j 最后的位置会是 key 的位置 -1,而 i 则刚刚好是答案。因此这里也可写 j+1
      
      def last(key):
          i=0;j=len(data)-1
          while i<=j:
              m=(i+j)//2
              if data[m]<key:
                  j=m-1
              else:
                  i=m+1#找到key时,任选则向右走(找到最后一个key)
          return j
      
      pos1=first(b)
      pos2=last(a)
      #print(pos1)
      #print(pos2)
      for i in range(pos2,pos1,-1):
          print(data[i],end=" ")
      if pos1>pos2:
          print("-1")
      else:
          print(data[pos1])
          print(pos2-pos1+1)
      
      • 2
        @ 2023-9-19 16:27:05

        以下给出python解法

        #输入
        data = list(map(int,input().split()))
        a,b = map(int,input().split())
        #排序
        data.sort()
        #左右索引号,初值为左右两端点
        l,r=0,len(data)-1
        #求左索引号
        for i in data:
            #不知道是否有用的特判
            if (l==0):
                if data[0] > b :
                    #其实就是无结果
                    l = r+1
                    break
            if ( data[l] >=a ):
                break
            l = l+1
        #求右索引号
        for i in data[::-1]:
            if (r==len(data)-1):
                if (data[r] < a):
                    r = -1
                    break
            if ( data[r] <=b ):
                break
            r = r -1
        #无结果则输出-1
        if (l>=r):
            print(-1)
        #有结果则输出结果
        else :
            #print(data[l:r+1])
            nums = 0
            for i in data[l:r+1]:
                print(i,end=" ")
                nums = nums + 1
            #不用加会有空格
            print("\n"+str(nums))
        

        因为data[]中不一定会有等于a或者b的值,所以str.index()是没法用的

        • 1
          @ 2024-12-19 11:31:47
          num=list(map(int,input().split()))
          a,b=map(int,input().split())
          ans=[]
          sum=0
          for i in num:
              if i>=a and i<=b:
                  sum+=1
                  ans.append(i)
          if not len(ans):
              print("-1")
          else:
              ans.sort()
              for i in ans:
                  print(i,end=" ")
              print('\n'+str(sum))
          
          • 0
            @ 2025-4-30 11:58:50
            c=[int(i) for i in input().split()]
            c.sort()
            a,b=map(int,input().split())
            ans=0
            for i in c:
                if a<=i<=b:
                    print(i,end=' ')
                    ans+=1
            print()
            if ans:
                print(ans)
            else:
                print(-1)
            

            这题不用二分也行

            • -5
              @ 2023-2-9 11:39:01

              各位加油

              • 1

              信息

              ID
              802
              时间
              1000ms
              内存
              256MiB
              难度
              7
              标签
              递交数
              1191
              已通过
              237
              上传者