Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Eau de Cologne

[2024-02-19~] 문제 풀기 (ABC341G/ARC130F,133F/EduCF105D,111D/BOJ23719) 본문

rkgk

[2024-02-19~] 문제 풀기 (ABC341G/ARC130F,133F/EduCF105D,111D/BOJ23719)

cologne 2024. 2. 19. 02:13

https://atcoder.jp/contests/abc341/tasks/abc341_g

 

G - Highest Ratio

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

풀이: 문제를 결국 어떤식으로 바꿀 수 있냐면 누적합을 $S$라고 하면, $\frac{S_j - S_i}{j-i}$가 최대가 되는 $j$를 모든 $i = 0, \cdots, N-1$에 대해서 구해야 한다. 생각하기 편하게 수열을 뒤집어서 생각하면, $i$번째 단계에서는 $(0, S_0); \cdots; (i-1, S_{i-1})$에 대해 선을 그었을 때 기울기가 가장 큰 선분을 찾아야 한다. 이는 $(0, S_0); \cdots; (i-1, S_{i-1})$ 점을 이용해서 convex한 윗쪽 hull을 관리해준다음에 $S_i$에서 접선을 긋는 것이라고 생각할 수 있다.

hull을 $x$좌표 순으로 Incremental하게 구하는 방법은 Monotone Chain을 사용하면 쉽다. 접선은 convex hull에 $(i, S_i)$까지 포함 시킨 후에 가장 마지막 선분이 접선이 된다.

 

코드: https://atcoder.jp/contests/abc341/submissions/50433537


https://atcoder.jp/contests/abc130/tasks/abc130_f

 

F - Minimum Bounding Box

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

풀이: 볼록함수와 오목함수에 대해서는 다음 성질이 성립한다.

  • $f(x) = ax+b$는 볼록함수이다.
  • 볼록함수 $f, g$에 대해 $\max(f, g)$는 볼록함수이다.
  • 오목함수 $f, g$에 대해 $\min(f, g)$는 오목함수이다.
  • 볼록/오목함수 $f, g$에 대해 $f+g$는 볼록/오목함수이다.
  • $f(x)$가 볼록/오목함수이면, $-f(x)$는 오목/볼록함수이다.

또한, piecewise linear 함수(구간에 따라 선형인 함수)는 다음 성질이 성립한다.

  • $f(x) = ax+b$는 piecewise linear이다.
  • piecewise linear $f, g$에 대해 $f+g; -f; \min(f, g); \max(f, g)$ 모두 piecewise linear이다.

이제 이 관찰을 기반으로 시간에 따른 함수 $(x_{max} - x_{min}) \times (y_{max} - y_{min})$의 성질을 찾아보자.

  • $x_{max}$와 $y_{max}$는 볼록하고 piecewise linear 함수의 $\max$이므로 볼록이고 piecewise linear이다.
  • $x_{min}$과 $y_{min}$은 오목하고 piecewise linear 함수의 $\min$이므로 오목이고 piecewise linear이다. 그래서 $-x_{min}$과 $-y_{min}$은 볼록함수이다.
  • $x_{max} - x_{min}$과 $y_{max} - y_{min}$은 두 볼록하고 piecewise linear 함수의 합이므로 볼록하고 piecewise linear이다.

이제 $(x_{max} - x_{min}) \times (y_{max} - y_{min})$를 살펴보자.

  • 두 함수가 최솟값이 되는 $t_{min}$을 공유하면 $t < t_{min}$인 곳에서는 함수가 단조감소하고, $t<t_{max}$인 곳에서는 함수가 단조증가한다.
  • 두 함수가 최솟값이 되는 $t$를 공유하지 않을 때, 일반성을 잃지 않고 $(x_{max} - x_{min})$이 증가하기 시작하는 시점을 $t_1$, $(y_{max} - y_{min})$ 감소하기 끝난 시점을 $t_2$라고 하자. $t_1$과 $t_2$사이에서의 $(x_{max} - x_{min}) \times (y_{max} - y_{min})$는 볼록한 $2$차 함수이기 때문에, 여기서의 최솟값을 기준으로 왼쪽은 함수가 감소하고, 오른쪽은 함수가 증가한다.

즉, 어떤 $t$를 기준으로 왼쪽에서는 함수가 감소하고 오른쪽에서는 함수가 증가하기 때문에 삼분탐색을 쓸 수 있다.

 

코드: https://atcoder.jp/contests/abc130/submissions/50433767


 

 

 

 

 

 

 

'rkgk' 카테고리의 다른 글

[Rust] Lifetime elision  (0) 2023.10.06
인류의 엔딩 크레딧  (0) 2023.07.31
졸업하고싶다  (0) 2023.07.19
FastIO 메모  (0) 2023.05.25
[Working In Progress] Euler Tour Trick + LCA + HLD Template  (0) 2023.05.05