0
0

More than 1 year has passed since last update.

ABC256 C Dif:541 『AtCoder ABC251~275 ARC140~151 灰・茶・緑問題 超詳細解説』サンプル

Last updated at Posted at 2023-01-05

この記事は 『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までと小さめなので全探索をすればいい。

【解説】
マス目に名前をつける。
ABC256_C_1.png

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)
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