Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 261 A問題 Intersection

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

数直線がある. この数直線に対して, 以下のように一部分を赤色と青色で塗った.

  •  X=L_1 から  X=R_1 までを全て赤色で塗る.
  •  X=L_2 から  X=R_2 までを全て青色で塗る.

このとき, 数直線において赤色でも青色でも塗られている部分の長さを求めよ.

制約

  •  0 \leq L_1 \leq R_1 \leq 100
  •  0 \leq L_2 \leq R_2 \leq 100

解法

この問題は次のようになる.

2つの閉区間  [L_1, R_1] [L_2, R_2] の共通部分の長さを求めよ.

ここで,  a,b,c,d を実数としたとき, 従う.

 [a,b] \cap [c,d]=[\max(a,c), \min(b,d)]

 [a,b] の長さを  \ell (a,b) としたとき,

 \ell (a,b)=\begin{cases} b-a & (a \leq b) \\ 0 & (a \gt b)\end{cases}=\max(b-a,0)

以上から, 求めるべきは  \ell (\max(L_1, L_2), \min(R_1, R_2)) であることがわかり,

 \ell (\max(L\_1, L\_2), \min(R\_1, R\_2))=\max(\min(R_1, R_2)-\max(L_1, L_2), 0)

である.