![見出し画像](https://assets.st-note.com/production/uploads/images/87085030/rectangle_large_type_2_e1a49d2ba1c16010c01c29da1ed960fd.png?width=1200)
[ABC269Python]UNICORNプログラミングコンテスト2022(AtCoder Beginner Contest 269)A~C問題Python解説
2022年9月17日に行われました、Atcoder社主催のABC269の解説記事です。
是非いいね・コメントお願いいたします。
A問題
a, b, c, d = map(int,input().split())
print((a+b)*(c-d))
print("Takahashi")
整数が与えられますので、計算結果と文字列を出力します。
1行目には(a+b)×(c-d)の計算結果を出力します。
2行目には文字列Takahashiを出力します。
B問題
S = [list(input()) for i in range(10)]
for i in range(10):
for j in range(10):
if S[i][j] == "#":
B = i+1
D = j+1
for i in range(1, 11):
for j in range(1, 11):
if S[-i][-j] == "#":
A = 11-i
C = 11-j
print(A, B)
print(C, D)
B問題としては少し難しい問題でした。
ただ、10×10のマス目なので、TLEは考えなくてよさそうです。
いろいろな解き方が考えられますので、私のは一例として捉えてくださいね。
問題文がややこしいですが、
要は#で作られる正方形の座標を出力しろという問題でした。
入力例1を例題として扱います。
#で作られる4×4の正方形の座標を求めるわけですが、
正方形が上辺、右辺、下辺、左辺で囲まれているとすると、
Aは上辺のi座標
Bは下辺のi座標
Cは左辺のj座標
Dは右辺のj座標
が当てはまっています。
これを出力すればいいということです。
1つ1つ求めてもいいですが、
正方形の左上の点の座標を求めれば、
AとCが求めることができ、
正方形の右下の点の座標を求めれば、
BとDを求めることができます。
どのように左上と右下の点の座標を求めるかというと、
10×10のマス目の左上から探していき、最後の#の座標が右下の座標
10×10のマス目の右下から探していき
(インデックスを-1から減少させれば探せます)、
最後の#の座標が左上の座標
になります。
最後の出力方法は2段になっているので、注意が必要です。
C問題
from itertools import product
N = int(input())
n = format(N, "b")
lenn = len(n)
lis = [[] for _ in range(lenn)]
# print(n,lenn)
for i in range(lenn):
if n[i] == "0":
lis[i] = ["0"]
else:
lis[i] = ["0","1"]
# print(lis)
lst = [*map(list, product(*lis))]
# print(lst)
for i in lst:
i = int("".join(i), 2)
print(i)
ⅹもNも2進数に直した形で進めていきます。
10進数⇔2進数のやり方は以下を確認してください。
問題分の条件を確認すると、
「xの2^kの位が1ならば、Nの2^kの位は1が成り立つ」
と記載があります。
ここでは数学の考え方を使うのでもしわからなければ、
以下などを確認してください。
上記の条件を言い換えて、
Nは既に与えられているので、
2進数にしたNからxを求めるとすると、
Nは2進数なので、Nのある位は0か1になります。
Nのある位が0だとするとxのある位は0になります。
Nのある位が1だとするとxのある位は0か1になります。
つまり、xの全ての位について、
0と1が考えられる場合と0しか考えられない場合があるという
判断になりますね。
では、スクリプトを書いていきましょう。
まずは、入力されたNを2進数に直します。(これをnとします。)
nの桁数を確認して(lenn)、
nを1桁ずつ確認していきます。
先程も申し上げた通り、
ある桁が0なら["0"]をその桁に代入、
1なら["0","1"]をその桁に代入します。
そして、全ての可能性があるlenn桁の2進数を作成した上で、
最後に10進数に直して出力します。
組み合わせは以下を確認してください。
質問はコメントにてお待ちしています。
この記事が気に入ったらサポートをしてみませんか?