6 条题解
-
5
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
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
以下给出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
信息
- ID
- 802
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 1191
- 已通过
- 237
- 上传者