Python3で解く AtCoder Regular Contest 107 B - Quadruple
まず、 すべてのパターンを一気に考えようとせず、かつを満たすの組み合わせ数を出せるようにする。その後条件を詰めていく。
結果的に、問題はなので、かつとして考えることができる。
目次
概要
- 整数が与えられる。
- 4つの整数の組であって,以下の条件を両方満たすものは何個あるか?
数の大きさの制約は問題を見てもらう。
解くときに考えた内容
- 問題をかつなので、かつかつとまず捉える。
とすると、以下の条件を満たすを解ければ良いとわかる。
- かつ
例えば のとき
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
- におけるの組み合わせ数 におけるの組み合わせ数()
ここまで考えればよい。
肝心の、は計算式では以下のように表せる。
- の制約がなければ、だが、 の制約下だと、 のどちらか小さい方になる。
- また、うまく条件分岐すれば良いが、面倒なので、の値が以下未満になったらとなるようにする。
コード
def a_b_x(n, k): # a+b=xかつ1<=a, b<=nを満たす個数 # 数えるべき部分をif文で書くべきだが、面倒なので範囲外は0とする。 ans = max(0, min(k-1, 2*n - (k-1))) return ans n, k = map(int, input().split()) cnt = 0 for i in range(2, 2*n+1): cnt += a_b_x(n, i) * a_b_x(n, i-k) print(cnt)
参考になる書籍
- 問題解決力を鍛える!アルゴリズムとデータ構造
けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも非常に結構読みやすい!!!(実際に、けんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているし、この書籍も非常に読みやすい)どのようなステータスの人にもおすすめの一冊になっている。
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
- 作者:大槻 兼資
- 発売日: 2020/10/02
- メディア: 単行本(ソフトカバー)
書籍は読み終わったので、Pythonで章末問題をこなしていっている。