この記事は 『AtCoder ABC251~275 ARC140~151 灰・茶・緑問題 超詳細解説』 のサンプルです。
値段:300円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B0BRNTM9Z4
【booth(pdf)】
https://sano192.booth.pm/items/4455120
ARC140~151の部分のみ抜粋した廉価版 もあります。
値段:200円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B0BRNRXPCV
【booth(pdf)】
https://sano192.booth.pm/items/4455133
【サンプル一覧】
ABC251 A:https://qiita.com/sano192/items/810a4a7d5cf61321bb05
ABC262 B:https://qiita.com/sano192/items/8a9cc91d73a798de6a54
ABC256 C:https://qiita.com/sano192/items/c52d24d0cdf3797a77d7
ABC259 D:https://qiita.com/sano192/items/e39d3636c1ea5d62c1bb
「ものすごく丁寧でわかりやすいABC解説」シリーズをベースに【キーワード】【どう考える?】【別解】を追加し、【解説】と【実装のコツ】を分けることでよりわかりやすく、具体例や図もより豊富に全ての問題の解説を書き直しました!
さらにQiitaでは公開していないARC140~151の灰・茶・緑問題も解説しています!
緑を目指す灰・茶コーダーの方へおすすめ!
【キーワード】
なし
【どう考える?】
適切な4マスを決めれば残りのマスの値も決まる。
制約は30までと小さめなので全探索をすればいい。
M11,M12,M21,M22を埋めれば他のマスも埋めることができる。
方程式を立てると以下のようになる。
M11+M12+M13=h1
M21+M22+M23=h2
M31+M32+M33=h3
M11+M21+M31=w1
M12+M22+M23=w2
M13+M23+M33=w3
M13,M23,M33,M31,M32を求めるために式変形する。
M13=h1-(M11+M12)
M23=h2-(M21+M22)
M33=h3-(M31+M32)
M31=w1-(M11+M21)
M32=w2-(M12+M22)
こうして求めた値について以下が成り立てば良い。
M13+M23+M33=w3
h,wは最大でも30なのでマスに入る数は1~28まで。4マスを全通り確かめると28^4=614656通りであり、これなら余裕で間に合う。
【実装のコツ】
<多重ループ>
本問はM11,M12,M21,M22を求めるために四重ループが必要。
以下のように書く。
# M11=1~28
for M11 in range(1,29):
# M12=1~28
for M12 in range(1,29):
# M21=1~28
for M21 in range(1,29):
# M22=1~28
for M22 in range(1,29):
【提出】
# 入力の受け取り
h1,h2,h3,w1,w2,w3=map(int,input().split())
# 答えのカウント
ans=0
# M11=1~28
for M11 in range(1,29):
# M12=1~28
for M12 in range(1,29):
# M21=1~28
for M21 in range(1,29):
# M22=1~28
for M22 in range(1,29):
# それぞれの値を計算
M13=h1-(M11+M12)
M23=h2-(M21+M22)
M31=w1-(M11+M21)
M32=w2-(M12+M22)
M33=h3-(M31+M32)
# ・全て正の整数(0より大きい)
if 0<M13 and 0<M23 and 0<M31 and 0<M32 and 0<M33:
# ・M13+M23+M33==w3も成り立つ
if M13+M23+M33==w3:
# 答えにカウント
ans+=1
# 答えの出力
print(ans)