ARC107 – B Quadruple

  • 問題

https://atcoder.jp/contests/arc107/tasks/arc107_b

  • 解き方

与えられた式は

a + b – c – d = K

a + b – ( c + d ) = K

と変形できるので、a + b = x, c + d = yとすれば、制約よりxについての全探索をO(N)で済ませることが出来る。というのも、xを決めれば

( a + b = xとなる場合の数 ) * ( c + d = y = K – xとなる場合の数 )

という式によって求まるからである。

従って、a + b = xとなる場合の数を前計算しておく。

ここで、1≦ a, b ≦ N , a + b = Kである場合の数は以下のように求められる。

min( K – 1 , 2N + 1 – K )

これは a を 1 ~ N まで動かすことを考えて

K ≦ Nの時

(a, b) = (1, K – 1), (2, K – 2), …, (K – 1, 1)のK – 1通り

K > Nの時、pをK – p = Nとなる値として

(a, b) = (p, K – p), (p + 1, K – p – 1), …, (N, K – N)の2N + 1 – K通り

であることを考えると成立していることがわかる。

提出したコードはこの方法ではないので(汚く解いたので)載せません。

投稿者: Sooh31

I am going to write about competitive programming, especially AtCoder and Codeforces. I want to share unofficial editorials for people who cannot read Japanese. 競技プログラミングについて書いていこうと思います。記事は主に英語で書く予定です。よろしくお願いします! current status : AtCoder水(1235), Codeforces青(1603) (2020/11/09)

コメントを残す

WordPress.com で次のようなサイトをデザイン
始めてみよう