見出し画像

[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問題

後日記載します。

いいなと思ったら応援しよう!