Size: a a a

2021 March 08

CC

Chris Calvin 🦖 in pro.cxx.holywars
если больше, то формула чуть усложняется и тебе надо за константу высчитать номер контура и количество элементов которые идут до контура в котором находится K
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
Yarique Belgorodsky
число колец не константно же
Но ты считаешь для любого N(где єто контуры за константу)
источник

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx.holywars
О, вы тут про Соника говорите
источник

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx.holywars
Колечки
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
ибо сумма арифметической прогрессии за O(1) просчитывается
источник

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx.holywars
Chris Calvin 🦖
ибо сумма арифметической прогрессии за O(1) просчитывается
+
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
Yarique Belgorodsky
число колец не константно же
Во, даже на гитхабе на пыхтоне есть решенное
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
# (Variant #6 for exercise 5.18 on EPI (Elements of Programming Interviews)) (September 2018 edition)
# Consider a 10x7 (mxn) matrix, in which we get 30 elements for the the outer ring, the next outer ring would have 22 elements, then 14 elements, and the most inner ring has the remaining elements. The number of elements per ring is given by 2 x (m - (1 + (2 x (r-1) ))) + 2 x (n - (1 + (2 x (r-1) ))), for the rth ring.
# Save from the most inner ring, the difference between the number of elements of each adjacent ring is 8 elements. If we want to know the number of elements of the current ring plus all the other previous ones, we get an arithmetic series (https://en.wikipedia.org/wiki/Arithmetic_progression#Sum).
# The sum of all the elements until a given r is given by sum = (r(a1 + ar)) / 2, being a1 = 2(m-1) + 2(n-1), ar = 2 x (m - (1 + (2 x (r-1) ))) + 2 x (n - (1 + (2 x (r-1) ))). If we solve the equation in relation to r, using the quadratic formula to disentangle the final polynomial, we reach r = math.floor((-(m + n) + math.sqrt((m+n)**2 - 4*k)) / (-4))
# Now we can know in which ring the kth element is, and also know the number of elements leading up to this ring. That is the base of the below algorithm.
# The rest is working with these two pieces of information to work out an offset and figure out where that offset falls in the ring (top, right, bottom or bottom portion)
# This algorithm has O(1) time complexity.
# *Note that the algorithm below computes the x and y on the array for a given k, m and n, which is the core part of this problem. Getting the array item for these coordinates is trivial from here.*

import math

def kth_element_spiral(k: int, m: int, n: int):
   first_ring_max = 2 * (m-1) + 2 * (n - 1)

   ring, ring_start_elements = None, None

   if (k < first_ring_max):
       ring = 0
       ring_start_elements = 0
   else:
       ring = int(math.floor((-(m + n) + math.sqrt((m+n)**2 - 4*k)) /(-4)))
       ring_start_elements = int((ring * (first_ring_max + 2 * (m-(1 + 2*(ring - 1))) + 2 * (n-(1 + 2*(ring - 1))))) / 2)

   offset = k - ring_start_elements

   width = (m - ring*2) - 1
   height = (n - ring*2) - 1

   if (offset <= width): # top
       x = ring + offset
       y = ring
       return (x, y)
   elif (offset <= width + height): # right
       x = m - ring - 1
       y = ring + (offset - width)
       return (x, y)
   elif (offset <= width + height + width): # bottom
       x = width - (offset - width - height)
       y = n - ring - 1
       return (x, y)
   else: # left
       x = ring
       y = height - (offset - width - height - width)
       return (x, y)
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
Только у них терминология не Контур, а Кольцо
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
а так, это именно то, о чем мы с Кириллом грили
источник

YB

Yarique Belgorodsky in pro.cxx.holywars
бля, проёбанная терминалогия...
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
Yarique Belgorodsky
бля, проёбанная терминалогия...
м?
источник

YB

Yarique Belgorodsky in pro.cxx.holywars
спс
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
ну крч, тут таки честный O(1)
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
но хак грязноватый, дыа
источник

YB

Yarique Belgorodsky in pro.cxx.holywars
ассоциативные кольца - чёт прям мой проёб чистый
источник

YB

Yarique Belgorodsky in pro.cxx.holywars
и походу они реально через ТФКП выводятся как-то часто
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
Yarique Belgorodsky
и походу они реально через ТФКП выводятся как-то часто
ну тут терминология подсьехала
источник

CC

Chris Calvin 🦖 in pro.cxx.holywars
если бы тут нужен был ТФКП то задача была вообще другого левела
источник