Educational Codeforces Round 185
Overview
-
Solution link: https://codeforces.com/blog/entry/148798
-
내용
Takeaway
- 이번 대회에서 새로 배운 테크닉:
- 내가 저지른 실수:
- 다음에 비슷한 문제를 만나면 할 행동:
Problems
A - Maximum Neighborhood
- 적당한 브론즈 구현 문제이다.
- 격자의 각 칸마다 인접한 4칸의 숫자 합을 구해줘야 하는데, 이 과정에서 배열 초기화를 안 해주어 한 번 틀렸다. (1-based trick)
B - Addition on a Segment
- [l, r] 구간에 1을 더하는 것을 정확히 번 반복하여, 주어진 길이 의 수열의 multiset과 같은 수열을 만들어낼 때, 사용된 구간의 길이의 최댓값을 최대화하는 문제이다.
- 최대 길이를 라 두면, , 따라서 이어야 한다.
- 또한, 는 nonzero element의 개수보다도 적거나 같아야 하고, 따라서 둘 중 최솟값을 출력하면 된다.
C - Quotient and Remainder
-
Q 배열과 R 배열이 주어졌을 때, 인 가 존재하면 를 배열에서 제거할 수 있다.
-
이때 가능한 최대 연산 횟수를 구하는 문제이다.
-
r_{j} < y이고, 가 작으면 좋으므로 최적의 는 이다. 따라서 이면 두 원소를 제거할 수 있다.
-
고정된 에 대해, 이면 을 사용할 수 있고, 이때 최대의 을 사용하는 것이 유리하다.
-
가 커질수록 우변은 작아지므로, 큰 부터 가능한 최대 을 사용하는 전략이 유효하다.
D
- solved by 0917ba
- 업솔빙 예정
E - Binary Strings and Blocks
-
문제를 잘 변형하면, 구간 개가 있고, 각 구간에 1이 적어도 하나는 등장하도록 길이 의 binary string을 구성하는 경우의 수를 세는 문제가 된다.
-
Sol 1)
-
일단 쓸데없는 구간을 제거해서 정렬했을 때 구간의 양 끝이 단조 증가하도록 두자.
-
DP를 쓸 수 있을 것 같다. : 번째 구간부터 만족시키면서 채워갈 때의 경우의 수라 두자.
-
번째 구간에서 최초로 등장하는 1의 위치에 따라 케이스워크를 할 수 있다. dp는 자명한데, 잘 생각해보면 펜윅 트리로 시간복잡도를 줄일 수 있는 꼴이다.
-
과 같은 식이 나오는데, 마지막 항만 multiset으로 따로 처리해주면 된다.
-
Sol 2)
-
선형에 풀 수 있는 방법이 있다. 주어진 제약 조건을 다른 방식으로 변형하는 것이다.
-
구간 [l, r]에 1이 적어도 하나 존재한다는 것은, 이하의 i$$a(i)=1인 최대의 가 이상이라는 뜻이다.
F
- solved by 0917ba
- 업솔빙 예정