A - 성장의 비약 선택권
case work
00:03 AC
C1 - 물정수열
그리디하게 최대한 작은 값을 선택하면 된다.
현재 값을 x라고 하면 다음 값은 max(x + 1, minv)가 된다.
00:21 AC
B1 - 알프스 케이블카
H의 제한이 작으므로 dp가 가능하다.
00:39 AC
정해는 그리디이다.
모든 a < b < c에 대하여 선분 (a, b), (b, c), (c, a)는 둔각삼각형을 이룬다.
따라서 모든 인접한 산에 대하여 와이어를 설치하는 것이 이득이다.
D1 - 그램팬
조건을 만족하는 A와 Z의 개수를 잘 세주면 된다.
00:49 AC
D2 - 팬램그
A와 Z의 개수가 모두 i개인 그램팬을 그리디하게 붙이면 된다.
이때 X는 i^2만큼 감소하며 결과 문자열의 길이는 항상 1e5 이하가 된다.
00:54 AC
F - XOR Hashing
모든 값의 개수는 동일하므로 어떠한 값이 등장할 확률은 1 / 2^N이 된다.
같은 해시 값이 존재하지 않을 확률을 구하는 것이 더 간편하다.
01:04 AC
E - 성향 성장의 비약
이분 탐색을 잘 돌리면 된다.
01:16 AC
H - 바벨탑
stack으로 풀이할 수 있다.
그리디하게 가장 무거운 원판을 선택하되 적절히 제거할 수 있도록 만들어야 한다.
02:16 AC
G - 원점
기하는 익숙하지 않고 익숙해지고 싶지도 않다.
내가 아는 공식은 원의 넓이 공식밖에 없어서 인터넷 뒤져가면서 공식을 찾았다.
02:38 WA 02:41 WA 02:46 WA 02:46 WA 02:48 WA 02:50 AC
WA를 받은 이유는 다음과 같다.
- 이분 탐색 범위에 오류가 있었다.
- 반지름과 지름을 헷갈렸다.
- EPS를 너무 크게 잡았다.
EPS는 항상 1e-9를 사용하였는데 기하 문제에서는 너무 큰 값이었다.
더 작은 값으로 1e-12를 사용하였더니 잘 돌아간다.
에디토리얼은 나의 풀이보다 더 간단한데 차이점은 다음과 같다.
나의 풀이에서는 정다각형의 넓이를 한 변의 길이로 변환한다.
에디토리얼에서는 정다각형의 넓이를 외접원의 반지름으로 변환한다.
이렇게 하면 답이 N인 경우를 더 간편하게 판단할 수 있다.
또한 나의 풀이에서는 답을 구할 때 이분 탐색을 이용한다.
공식에 sine 함수가 포함되어 있기 때문에 이분 탐색이 필수라고 생각하였다.
에디토리얼에서는 arc sine 함수로 이를 벗기고 이분 탐색 없이 답을 구한다.
역삼각함수는 정말 오랜만에 보는데 앞으로 마주하는 일 없었으면 한다.
I - 점프킹
Union-Find로 풀이할 수 있다.
03:07 WA
Union-Find에서 모든 데이터는 루트 노드를 기준으로 관리해야 한다.
03:13 AC
J - 진단 0 : 1 (not solved)
A 이상 B 이하의 수 중에서 M진수로 표현하였을 때 0이 아닌 자릿수가 N개인 수의 개수를 구하는 문제이다.
다음과 같은 재귀 함수를 정의할 수 있다.
/* 0 이상 K 이하의 수 중에서 M진수로 표현하였을 때
전체 D개의 자릿수 중 0이 아닌 자릿수가 N개인 수의 개수를 리턴 */
ll solve(ll K, ll M, ll D, ll N) { // do something }
구체적으로는 다음과 같이 구현할 수 있다.
ll solve(ll K, ll M, ll D, ll N) {
if K == M^D - 1 then
return C(D, N) * (M - 1)^N
D = D - 1;
if K > M^D - 1 then
return solve(M^D - 1, M, D, N) + (K / M^D - 1) * solve(M^D - 1, M, D, N - 1) + solve(K % M^D, M, D, N - 1);
else
return solve(K, M, D, N);
}
dp를 적용하면 속도가 매우 빨라진다.
K1 - 소떡소떡 (not solved)
sweeping으로 풀이할 수 있다.
소시지와 가래떡이 번갈아서 나왔는지 판별하는 부분이 까다롭다.
이는 인접한 동일한 음식물쌍의 개수를 관리함으로써 해결할 수 있다.
규칙을 잘 찾아서 구현해주면 된다.
K2 - 소떡소떡 2 (not solved)
에디토리얼은 무슨 말인지 이해하기 어려워서 내 마음대로 풀었다.
Segment Tree와 두 개의 set을 관리하면 된다.
Segment Tree에서는 각각의 y 좌표에 있는 음식물의 길이를 관리한다.
각각의 set에서는 소시지 또는 가래떡의 y 좌표를 관리한다.
동일한 음식물이 인접한 경우에는 가장 길이가 긴 음식물을 선택해야 한다.
규칙을 잘 찾아서 구현해주면 된다.
B2 - 알프스 케이블카 2 (not solved)
Pass
C2 - 물정수열 2 (not solved)
Pass
끝
끝
'대회 리뷰 > BOJ' 카테고리의 다른 글
Good Bye, BOJ 2022! (0) | 2023.01.03 |
---|---|
2022 제1회 미적확통컵 (0) | 2022.12.30 |
Zero One Algorithm Contest 2022 Open Contest (0) | 2022.12.27 |
2022 서울사이버대학교 프로그래밍 경진대회 (SCUPC) (0) | 2022.12.24 |
겨울 숲의 초대 (0) | 2022.12.18 |