본문 바로가기

알고리즘/Codeforces, AtCoder

(4)
AtCoder ABC 174 후기 (첫 올솔브) 엣코더 15번 만에 쉬운 셋이 걸려서 처음으로 올솔브를 달성했다. (38분 3패널티) C번은 의외로 못 푸는 사람이 많았다. 매 스텝마다 증가시켜야하는 값이 7 * 10 ^ n mod K인데 다음에 증가시켜야하는 값은 10 * (7 * 10 ^ (n - 1) mod K) mod K이므로 O(1)만에 구할 수 있다. E번은 전형적인 파라매트릭 서치였는데 많이 고통 받고나니 이제 실수도 안하고 코딩하는 것도 금방이다. F번이 백준에 있는 문제랑 입력 범위를 제외하고 완전히 같아서 금방 풀어버렸는데 국내 뿐만 아니라 해외 유저에게도 꽤 잘 알려진 문제였는지 푼 사람이 1257명이나 되었다. 일본 유저에게도 다음 글로 유명했다. 나는 모스 알고리즘으로 풀었는데 푸는 방법이 2가지나 더 있다고 한다. https:..
Codeforces Global Round 7 후기 A. Bad Ugly Numbers n = 1일 때 -1을 출력하고 나머지는 23, 223, 2233, 22223, 222223, 2222233, .... n-1개의 2와 1개의 3으로 채우는데 수의 합이 3의 배수가 되면 3의 갯수를 한개 늘린다. B. Maximums b_i = a_i - x_i이고 b1 = a1이므로 모든 b_i에 대해서 a_i = 최댓값 + b_i이며 b_i 0 이면 a_i가 최댓값보다 크므로 최댓값을 갱신한다. C. Permutation Partitions 1...k번째 최댓값은 무조건 포함하도록 segment를 나눠야한다. 그래서 1...k번째 최댓값을 m_1, m_2, ... , m_k라고 하고 m_i와 m_i+1 사이의 경계를..
Codeforces Round #603 (Div. 2) 후기 A. Sweet Problem for _ in range(int(input())): t = list(map(int,input().split())) t.sort() a,b,c = t d = c - b if d < a: c -= (d + (a-d)//2) b -= ((a-d) - (a-d)//2) else: c -= a print(a + min(b,c)) B. PIN Codes for _ in range(int(input())): N = int(input()) card = {} t = [] for i in range(N): q = input() if q not in card: card[q] = 1 else:card[q] += 1 t.append(q) cnt = 0 for i in range(N): if ca..
Codeforces Round #599 (Div. 2) 후기 [푼 문제] - A, B1, C A. Maximum Square 널판지(planks)로 만들 수 있는 최대 정사각형의 한변의 길이를 구하는 문제. 내림차순 정렬하고 인덱스와 비교하면서 한번 훑으면 된다. import sys input = sys.stdin.readline for _ in range(int(input())): N = int(input()) k = list(map(int, input().split())) k.sort(reverse=True) ans = 0 for i in range(N): if k[i] = N: ans = i+1 print(ans) B1. Character Swap (Easy Version) 두 문자열의 문자를 '최..