-
Codeforces Round 905 (Div. 3)코드포스 2024. 2. 29. 18:58
Dashboard - Codeforces Round 905 (Div. 3) - Codeforces
codeforces.com
C
i) k = 2, 3, 5 즉, 소수일 때
배열의 원소가 k의 배수가 되게 하는 최소 연산 횟수를 구하면 된다ii) k = 4 일때
cnt[i] := 4로 나눴을 때 나머지가 i인 원소의 개수
if cnt[0] > 0 or cnt[2] >= 2 : 배열의 곱이 4의 배수이다. -> 답이 0
elif cnt[3] > 0 : 나머지가 3인 원소에 1을 더해주면 배열 원소의 곱이 4의 배수이다 -> 답이 1
else: cnt[0] = 0 이고 cnt[2] <= 1 이고 cnt[3] = 0 인 상황이므로 배열의 수는 나머지가 1인 수 이거나 2이다. -> 답은 2-cnt[2]D
이때 주의할 점은
i) multiset이 empty인 경우 예외처리 해야한다
ii) multiset.erase(1) 는 모든 1를 지우므로 하나만 지우고 싶으면 multiset.erase(multiset.find(1))
iii) multiset은 hack에 주의해야한다.E
방법 1
방법 2
배열의 원소가 [a, b] 라고 하자.
a*2^x <= b*2^구
(a/b)*2^x <= 구
lg a - lg b + x <= 구
ceil(lg a - lg b + x) <= 구
이때 구하는 것이 음수일 수는 없으므로 구 = max(0, ceil(lg a - lg b + x))F
G2
'코드포스' 카테고리의 다른 글
Codeforces Round 932 (Div. 2) (0) 2024.03.06 Codeforces Round 828 (Div. 3) (1) 2024.02.27 Codeforces Round 891 (Div. 3) (1) 2024.02.27 Codeforces Round 479 (Div. 3) (1) 2024.02.14 Codeforces Round 481 (Div. 3) (1) 2024.02.14