[ABC310A~D Python]freee プログラミングコンテスト2023(AtCoder Beginner Contest 310)
A問題
# 入力
N, P, Q = map(int, input().split())
D = list(map(int, input().split()))
# 定価で買った場合(P)と、
# 料理の中から1番安いものを追加で注文した場合(Q+min(D))を
# 比較して安いほうを出力する
print(min(P, Q+min(D)))
選択肢としては定価のまま買うか、
一番安い料理と一緒に買って割引してもらうかのどちらかです。
B問題
# 入力
N, M = map(int, input().split())
List = [list(input().split()) for _ in range(N)]
for i in range(N):
# i番目の商品の価格
Pi = List[i][0]
# i番目の商品の機能の集合
Fi = set(List[i][2:])
for j in range(N):
# j番目の商品の価格
Pj = List[j][0]
# j番目の商品の機能の集合
Fj = set(List[j][2:])
# 条件を満たすか判断する
# 条件①:Pi>=Pj
if Pi >= Pj:
# 条件②:FiがFjに含まれる
if Fi <= Fj:
# 条件③:Pi>PjかFiにない製品がFjにある
if Pi > Pj or Fi < Fj:
# 全ての条件を満たせば、Yes
print("Yes")
exit()
print("No")
問題文の3つの条件をすべて満たす組み合わせはあるかどうか確認します。
集合同士の含まれるや含まれないは、
以下をご参考ください。
C問題
# 入力
N = int(input())
# 答え
ans = 0
# これまでに確認した棒を保存する集合
stick = set()
for i in range(N):
# 入力
S = input()
# 棒がまだ確認されていなければ、
if S not in stick :
# 答えをカウントアップする
ans += 1
# 棒をstickに保存する
stick.add(S)
# 反転した棒もstickに保存する
stick.add(S[::-1])
# 答えを出力する
print(ans)
入力された棒とその棒を反転したものの2つを保存しながら数えていきます。
D問題
後日記載します。