[Dos puntos] Preguntas de ejemplo del grupo python de la 14.ª Copa Blue Bridge

Escriba una pregunta de dicotomía hoy

1. Búsqueda binaria de elementos de matriz

Descripción del tema
Dada una matriz, se define mediante el siguiente código:

int data[200];
for(i = 0 ; i < 200 ; i ++)data[i] = 4 * i + 6;

Dado un cierto número (en la matriz de datos), encuentre su posición en la matriz.

Descripción de entrada
Ingrese un número entero para buscar (el número entero debe estar en la matriz de datos).

Salida Descripción
Muestra el índice de este entero en la matriz.

n=eval(input())
print((n-6)//4)

es fácil

2. Robot de barrido

inserte la descripción de la imagen aquí

n,k=map(int,input().split())
a=[0]    #这里加个0是因为下面从1开始
for i in range(k):
  a.append(int(input()))
a.sort()  #从小到大排序

def check(d):  # 检查每一个清理距离是否能将走廊清理完成
  len=0   #覆盖长度,从最左端开始一直到最右端
  for i in range(1,k+1):
    if len+d>=a[i]:
      if len>a[i]:
        len=a[i]+d-1  #这里减1是因为自己本身也需要清理
      else:   #否则直接就是当前长度+d
        len+=d
    else:
      return False
  return len>=n
l,r=1,n   #最短是1,最长是n
while l<r:    #二分查找计算清扫范围
  mid=(l+r)//2
  if check(mid):
    r=mid
  else:
    l=mid+1
print((l-1)*2)

Pensé en esta pregunta durante mucho tiempo al principio, y luego descubrí que la respuesta es en realidad el doble de la distancia máxima de limpieza entre todos los robots de limpieza . * 2
función de verificación : desde la primera posición, ingrese una posición por una posición a través de la Método de dicotomía, si el punto se incluye después de agregar el medio, se juzga si el punto está a la izquierda o a la derecha del medio, a través del bucle, si cada punto Si se puede cubrir la distancia de limpieza, será Verdadero, de lo contrario será ser falso
La explicación puede no ser clara, por favor deje un mensaje para discutir

3. Ajustar la piedra

inserte la descripción de la imagen aquí

L,N,M=map(int,input().split())
stone=[]
for i in range(N):
  stone.append(int(input()))

def check(d):
  num=0
  pos=0
  for i in range(0,N):
    if (stone[i]-pos<d):
      num+=1
    else:
      pos=stone[i]
  if num<=M: return True
  else: return False

l,r=1,L
while(l<r):
  mid=l+(r-l)//2
  if check(mid):
    l=mid+1
  else:
    r=mid-1

if check(l):
  print(l)
else:
  print(l-1)

Debido a que todos son problemas dicotómicos, los códigos son relativamente similares. A través de la pregunta anterior, ahora entiendo lo que significa
la dicotomía . El concursante salta un poco más, pero no aprueba el bushi. Ingrese el espacio uno por uno para asegurarse de que el El número de piedras móviles no excede el número especificado. Por ejemplo, si ingresa el valor máximo, todas las piedras se pueden mover y el valor mínimo no tiene ninguna piedra. Por lo tanto, encuentre la posición por binario.

4. Solución de ecuaciones cúbicas unarias

inserte la descripción de la imagen aquí

a,b,c,d=map(float,input().split())
def y(x):
  return a*x*x*x+b*x*x+c*x+d

for i in range(-100,100):
  left=i
  right=i+1
  y1=y(left)
  y2=y(right)
  if y1==0:
    print("{:.2f}".format(left),end=" ")
  if y1*y2<0:
    while right-left>=0.001:
      mid =(left+right)/2
      if y(mid)*y(right)<=0:
        left=mid
      else:
        right=mid
    print("{:.2f}".format(left),end=" ")

A través del estudio de las primeras tres preguntas, creo que ya eres hábil con esta. Es una pregunta de prueba de función de la escuela secundaria. Recuerda que la entrada es un decimal de punto flotante, con una precisión de los dos últimos dígitos.

5, 123

inserte la descripción de la imagen aquí

n=int(2e6+1)
def getp(x):return x*(x+1)//2
def gets(x):return x*(x+1)*(x+2)//6
def search(x):
    l,r=1,n-1
    while l<r:
        mid=(l+r)>>1
        if getp(mid)>=x:r=mid
        else:l=mid+1
    return l,x-getp(l-1)
def solve(l,r):
    pl,nl=search(l)#第pl组的第nl个数
    pr,nr=search(r)
    return gets(pr-1)-gets(pl-1)-getp(nl-1)+getp(nr)
T=int(input())
for _ in range(T):
    l,r=map(int,input().split())
    print(solve(l,r))

Encuentre la ubicación primero y devuelva el valor de la ubicación correspondiente en la función
gets-getp=el valor de la ubicación correspondiente.

Creo que si es inteligente
, debería ver las reglas. Este es el final de los dos. pregunta de muestra puntual, hasta la próxima

Supongo que te gusta

Origin blog.csdn.net/weixin_53415043/article/details/128891964
Recomendado
Clasificación