E. Hoofball

-iknoom1107

문제 μ„€λͺ…

각 μ†ŒλŠ” κ°€κΉŒμš΄ μ†Œν•œν…Œλ§Œ 곡을 νŒ¨μŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

N이 μ΅œλŒ€ 100이라 N^2으둜 풀어도 μΆ©λΆ„ν•©λ‹ˆλ‹€.

  1. N개의 μ†Œ μ€‘μ—μ„œ ν•œλ²ˆμ— κ°€μž₯ λ§Žμ€ μ†Œμ—κ²Œ νŒ¨μŠ€ν•  수 μžˆλŠ” μ†Œλ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€.

  2. 곡을 νŒ¨μŠ€λ°›μ§€ μ•Šμ€ μ†Œμ— λŒ€ν•΄μ„œλ§Œ 1λ²ˆμ„ λ°˜λ³΅ν•©λ‹ˆλ‹€.

Nλ§ˆλ¦¬μ— μ†Œμ— λŒ€ν•΄μ„œ κ°€μž₯ κ°€κΉŒμš΄ μ†Œμ˜ 번호λ₯Ό 1차원 배열에 μ €μž₯ν•˜λ©΄ κ΅¬ν˜„ν•  λ•Œ 더 κΉ”λ”ν• κ²λ‹ˆλ‹€.

μ†ŒμŠ€μ½”λ“œ

<Python>

n = int(input())
x = [-1e9] + sorted(map(int, input().split())) + [1e9]
vst = [False] * (n + 1)
ans = 0
while True:
    tmp = []
    for i in range(1,n+1):
        if vst[i]: continue
        p = q = i
        while q <= n and x[q] - x[q - 1] > x[q + 1] - x[q] and not vst[q + 1]:
            q += 1
        while 0 < p and x[p] - x[p - 1] <= x[p + 1] - x[p] and not vst[q - 1]:
            p -= 1
        tmp.append((i - p, p, i))
        tmp.append((q - i, i, q))
    if not tmp: break
    tmp.sort()
    _, l, r = tmp[-1]
    for i in range(l, r+1):
        vst[i - 1] = True
    ans += 1
print(ans)

Last updated

Was this helpful?