atcoder ABC102

1646 단어 AtCoderjava8
c문제는 간단했지만 D문제는 600점이라는 것도 어려웠다.
h tps // 아 t 여기 r. jp / 이런 sts / 아 bc102

C 문제



정책



모든 ai-i와의 절대치가 최소가 되는 값 b를 구하는 문제.
수열의 개수가 최대로 10의 5승까지 있으므로 모든 값에 대해 절대치의 합을 구해 가는 것은 시간에 맞지 않는다. 여기서, 수열 a-i와의 절대치를 생각해 보면 분명히 수열을 소트하여 중간의 수치를 b로 하면 절대치의 합이 최소가 되는 것을 알 수 있다.

D 문제



정책



우선 3개의 구획을 전 탐색을 하고 싶지만 수열의 수에 주목하면 10의 5승이므로 분명히 늦지 않기 때문에, 전 탐색할 수 있는 것은 하나의 구획만이 된다. 그래서 어떤 구획을 선택할지 생각해 보면 중간의 구획을 선택하면 구획의 좌측은 우측에 관여할 수 없고 구획의 우측은 왼쪽에 관여할 수 없기 때문에 고속으로 구획의 최적 장소를 알 것 같다. . 따라서, 중간의 구획을 전체 탐색했을 때, 고속으로 좌의 구획의 위치와 우측의 구획의 위치를 ​​구하는 것을 생각한다. 여기서, 중간의 구획보다 좌측을 생각하면 좌측의 수열의 합은 일정하다. 마찬가지로 오른쪽의 합도 일정합니다. 그림으로하면 아래와 같이 된다.


여기서는 좌측만을 생각한다(우측도 마찬가지로 하여 구할 수 있다). 좌측의 합을 S, 왼쪽의 구획보다 좌측의 합을 A, 우측을 S-A로 하고, 수직선상으로 나타내면 다음과 같이 된다.


전술한 바와 같이, S는 변하지 않기 때문에, S/2도 일정하다. 주제를 만족시키기 위해서는, 이 A로부터 S-A의 범위를 가능한 한 좁게 하면 된다. 즉, A를 S/2로 천화하면 된다. 주의해야 할 것은, 이분 탐색을 할 때, A를 S/2를 넘었을 때와, 그 1개전을 양쪽 모두 구해, 보다 A와 S-A의 절대치가 작은 쪽을 채용하는 것이다.

좋은 웹페이지 즐겨찾기