https://atcoder.jp/contests/abc128/tasks/abc128_d
- 일단 K번 choice 할 수 있는데, 이때 가능한 연산이 4가지여서 얼핏보면 $4^{100}$ 개의 선택으로 보인다.
- 고민을 잘 하다보면, 왼쪽과 오른쪽을 나눠서 생각할 수 있다는 것을 알게되고
- 또 고민을 하다보면 A연산의 수와 B연산의 수가 정해지면 항상 optimal한 해를 정렬만 하면 찾을 수 있다는 것을 알 수 있다.
- 정확히 말하면 A개를 뽑고, 그중에서 작은 순서대로 음수를 B개 집어넣는 것이다.
- 여기까지 고민하고 풀었는데 $O(R^4 \log{R})$이 나온다.
1 |
|
- 대회 끝나고 풀이를 보니, 몇단계 최적화가 더 있다. A와 B가 정해지면 C와 D는 신경쓸 것 없이 더 이득보는 것을 집어넣는 식으로 최적화 할 수 있다.
- 이 경우는 $O(R^3 \log{R})$ 에 풀 수 있다. (복습하자)
- Editorial에 보면 $O(R^2 \log{R})$ 인 해가 있다고 한다. B를 1만큼 shift 할 때 버려지는 연산이 2개 뿐이란 것을 이용하란다. 솔직히 풀이를 봐도 뭔말인지 모르긋다.