Автор задачі: | Imran AKKI |
Підготовка: | Imran AKKI |
Редагування: | Hasan Saleh (MathModel) |
Розв'язання Задача зводиться до знаходження загальної відстані, яку пройшов кожен учасник, і підрахунку тих, хто пробіг строго більше, ніж Боб.
Просимулюємо загальну відстань для швидкості і зменшення швидкості : на кожному кроці ви зменшуєте початкове на кратне , доки воно позитивне. Формально, загальна відстань буде
Тут k=\lfloor \frac{s-1}{t} \rfloor — це максимальна кількість кроків із позитивною швидкістю.
Щоб порахувати відстань, помітимо, що зустрічається k+1 разів, і ми маємо (1+2+3+...+k)t у від'ємній частині. А ми знаємо, що 1+2+3+...+k=\frac{k(k+1)}{2}, тоді загальна відстань обчислюється як
Тепер за цим обчислюємо відстань для -го учасника як d_i, сортуємо значення і рахуємо, скільки бігунів пробігли більше за Боба.
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)Складність \mathcal{O}(n \log n).