0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ABC解説】 ABC384 解説 (B~D)【Python】

Posted at

トヨタ自動車プログラミングコンテスト2024#12(AtCoder Beginner Contest 384) のB問題〜D問題をPythonで解説します。

提出コード

B問題

問題

B-1.jpg

画像の文字起こし

Div.1とDiv.2があります。
それぞれのコンテストにはレートの更新範囲があります。
Div.1の更新範囲は1600~2799です。
Div.2の更新範囲は1200~2399です。
参加したコンテストと、増レート数が与えられます。
現在のレートがコンテストの更新範囲ならレートを更新して、最終的なレートを出力してください。

アプローチ

B-2.jpg

画像の文字起こし

forとifで実装できます。
Dで条件分岐して、レートの更新範囲なら、レートに足します。

C問題

問題

C-1.jpg

画像の文字起こし

AからEまでの問題があり、各問題の得点が入力されます。
コンテスト参加者の得点状況は文字列で管理されます。
BCD ならBとCとD問題が解けて、それ以外は解けなかったことを表します。
ありうる得点の取り方の組み合わせを全て列挙してください。
並び方はスコアの降順、名前の昇順で並べてください。

アプローチ

C-2.jpg
C-3.jpg

画像の文字起こし

Bit全探索で2^5までを全探索します。
bitが立っている箇所をその得点が取れたこととして、記録します。
同時にABCDEの名前もそのbitが立っている文字をとって名前を生成します。

最後に名前の昇順にソートしてから、得点の降順にソートします。
先に名前の昇順をすることで、得点のソートをした際に、得点、名前のソートがされるようになります。

D問題

問題

D-1.jpg

画像の文字起こし

数値SとリストAが与えられます。リストAの中身は軽数です。
リストAの部分集合の和から、Sを生成できるかを求めてください。

例1
S = 42
A = [3, 8, 4]

[8,4,3,8,4,3,8,4]の部分集合で生成できます。

例2
S = 1
A = [3, 8, 4]

どの部分集合でも生成できません。

アプローチ

D-2.jpg

画像の文字起こし

最初にSをAの和で割った余りを求めます。
こうすることで、計算範囲をSまでにできます。これをaとします。
S = sum(A) * x + aと置けます。
したがって、このaが部分和にあるなら、Sを生成できます。
a = 42 % (3 + 8 + 4) = 12
a + 累積和が累積和の1つなら、それは生成できるということになります。
a+3=15の15は累積和に含まれます。よって生成できます。

累積和の特徴

D-3.jpg

画像の文字起こし

累積和a - 累積和b = 部分和k が成り立ちます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?