![見出し画像](https://assets.st-note.com/production/uploads/images/83239343/rectangle_large_type_2_1e37ed91574f52f48db31ad2aae1b23a.png?width=1200)
[ABC261]AtCoder Beginner Contest 261 A~C問題Python解説
A問題
l1, r1, l2, r2 = map(int, input().split())
ll1 = [_ for _ in range(l1, r1)]
ll2 = [_ for _ in range(l2, r2)]
ll1_ll2_and = set(ll1) & set(ll2)
print(len(l1_l2_and))
リストにするとイメージしやすいです。
入力例1を参考にします。
ll1 = [0 1 2]
ll2 = [1 2 3 4]
set() & set()で共通部分を取り出します。
この場合だとll1_ll2_and = [1 2]ですね。
最後に個数(長さ)を出力します。
B問題
n = int(input())
a = [input() for i in range(n)]
for i in range(n):
for j in range(n):
if i == j:
continue
else:
if a[i][j] == "W" and a[j][i] == "W":
print("incorrect")
exit()
elif a[i][j] == "W" and a[j][i] == "D":
print("incorrect")
exit()
elif a[i][j] == "D" and a[j][i] == "W":
print("incorrect")
exit()
elif a[i][j] == "D" and a[j][i] == "L":
print("incorrect")
exit()
elif a[i][j] == "L" and a[j][i] == "D":
print("incorrect")
exit()
elif a[i][j] == "L" and a[j][i] == "L":
print("incorrect")
exit()
print("correct")
制約よりNの値が小さいので、全部探しましょう。
総当たり戦はイメージしやすいと思いますが、WとL、DとDが組になります。
問題文にも書いてありますが、a[i][j]の対戦相手はa[j][i]ですね。
この対戦する同士が、WとL、DとDの組み合わせになっているかを確認します。
1回でもこの組み合わせに反するものがあれば×です。
C問題
n = int(input())
ss = {}
for i in range(n):
s = input()
if s not in ss:
print(s)
ss[s] = 1
else:
sss = s + "(" + str(ss[s]) + ")"
print(sss)
ss[s] += 1
問題文の「Siと同じ文字列が存在」が「Siを含む文字列」とかだともうちょっと難しくなるのですが、この場合だと問題文そのままでできると思います。
まず、出力に必要なので、文字列と文字列の個数を保存します。
リスト2つを組み合わせてもいいですが、今回は辞書を使います。
辞書については以下
キーが文字列、値がその文字列の個数を表します。
では実際に作業に入りましょう。
以下の動作をN回行います。
文字列を入力します。
入力した文字列が存在しないならば、
新しく辞書に追加します。
ss[文字列]=1
とします。
出力は問題文のとおり文字列をそのままです。
入力した文字列が存在するならば、
同じ文字列が何個出てきているのかを
ss[文字列]
で調べます。
うまくSi+(+X+)の形に調整して出力します。
最後に文字列の個数を+1するのを忘れずに。
この記事が気に入ったらサポートをしてみませんか?