Autor del Problema: | Imran AKKI |
Preparado por: | Imran AKKI |
Editado por: | Hasan Saleh (MathModel) |
Solución El problema es equivalente a obtener la distancia total recorrida por cada concursante y calcular cuántos concursantes viajaron estrictamente más que Bob.
Simulemos la distancia total recorrida para alguna velocidad y decremento de velocidad ; en cada paso continuaremos disminuyendo el original por un múltiplo de mientras sea positivo. Formalmente, la distancia total será
Aquí k=\lfloor \frac{s-1}{t} \rfloor , que es la máxima velocidad positiva que podemos alcanzar.
Para calcular la distancia, notemos que aparece k+1 veces y tenemos (1+2+3+...+k)t como parte negativa y sabemos que 1+2+3+...+k=\frac{k(k+1)}{2}, entonces la distancia total se calcula como
Ahora, según esto, calcula la distancia para el i_{th} concursante como d_i, ordena los valores y cuenta cuántos concursantes corrieron más que Bob.
for _ in range(int(input())):
n,b=map(int,input().split())
s=list(map(int,input().split()))
t=list(map(int,input().split()))
a=[]
want=-1
for i in range(n):
x=s[i]
r=(s[i]-1)//t[i]
x+=s[i]*r
v=(r*(r+1))//2
x-=v*t[i]
a.append(x)
if(i+1==b):
want=x
a.sort()
ans=1
for i in range(n-1):
if(a[i]==want and a[i+1]>want):
ans=n-i
break
print(ans)Complejidad \mathcal{O}(n \log n).