Hello 2026 (CF) 후기

NeCu1029·2026년 1월 8일

대회 후기

목록 보기
3/14

2026년 1월 7일~8일에 진행한 Hello 2026에 참가했습니다. 이번에도 3문제를 풀었습니다. Goodbye, BOJ! 2025부터 항상 3문제밖에 풀지 못하고 있는데, 다행히 레이팅이 오르기는 했습니다.

A. Binary Array Game (+1)

제출: 5분

첫 문제입니다. 조건을 잘 생각해 보면 Alice가 승리하는 것은 Alice가 첫 번째 차례에 nn개 미만의 수를 합치는 것으로 모든 수를 11로 만들 수 있는 것과 동치입니다. 그렇지 못하면 Bob이 모든 수를 합쳐 11로 만들 테니까요. 이것을 만족하기 위해서는 배열 양 끝의 두 수 중 적어도 하나는 11이어야 합니다. 이것을 판정하여 AC를 받았습니다.

B. Yet Another MEX Problem (+1)

제출: 33분

두 번째 문제입니다. 처음에 mex\mathrm{mex} 연산을 보고 좀 쫄아서(?) 오래 걸리게 되었습니다. 잘 생각해 보면 k1k-1개의 수를 남겼을 때 가능한 mex\mathrm{mex}의 최댓값은 k1k-1입니다. 이제 mex\mathrm{mex}xx가 되도록 삭제 연산을 한다고 합시다. 배열에 xx 이하의 모든 수가 존재한다면, 각 연산마다 중복이 있거나 xx보다 큰 수를 제거하여 mex\mathrm{mex}xx로 만들 수 있습니다. 하지만 xx 이하의 수 중 배열에 없는 것이 있다면 이는 불가능하죠. 따라서 max(배열에 있는 수의 최댓값,k1)\max(배열에\ 있는\ 수의\ 최댓값,k-1)이 답이 됩니다.

C. War Strategy (+2)

제출: 96분, 97분

세 번째 문제입니다. 처음에는 병사를 가까운 곳부터 한 명씩 차례대로 옮기는 비효율적인 방식으로 생각하여 오래 걸렸습니다. 이 방식으로는 mm의 시간 동안 O(m)O(\sqrt{m})개의 기지를 차지할 수 있지만, O(m)O(m)개의 기지를 차지하는 방법이 있습니다. 하지만 case work가 많아 지문으로 설명하기 곤란한 관계로, 평소와는 달리 정답 코드를 첨부합니다. 한 번 틀린 것은 ⑴에 있는 continue문을 쓰지 않고 제출해서 그렇습니다.

import sys

input = sys.stdin.readline

for _ in range(int(input())):
    n, m, k = map(int, input().split())
    if m == 1:
        print(min(n, 2))
        continue
    elif m == 2:
        if n <= 2:
            print(n)
        elif k == 1 or k == n:
            print(2)
        else:
            print(3)
        continue  # ⑴

    s = min(k - 1, n - k)
    l = max(k - 1, n - k)
    if m // 3 <= s - 1:
        print(m - m // 3 + 1)
    else:
        x = min((m - s + 1) // 2, l)
        print(s + x + 1)

결론

이렇게 해서 2518점의 점수를 획득하였으며, 퍼포먼스는 1485였습니다. 레이팅은 3점이 오른 1502로, 가까스로 1500대에 재진입했습니다. 그래도 올랐으면 된 거 아닐까요.

profile
경기과고 43rd

0개의 댓글