🔙
🔝

【paiza問題集 解説】
paizaの森練習問題コンテスト過去問題セット14

回文

回文

    s = input()
    print('Yes' if s == s[::-1] else 'No')
    
区間の三分割

区間の三分割

    l, r = map(int, input().split())
    print(l + (r-l) / 3, r - (r-l) / 3)
    

    そのまんまです。😊

割り切れる数の個数

割り切れる数の個数

    a, b = map(int, input().split())
    
    cnt = 0
    for i in range(a, b+1):
        if i % 2 == 0 or i % 3 == 0:
            cnt += 1
    
    print(cnt)
    
パイプを切る

パイプを切る

    _, k = map(int, input().split())
    A = map(int,input().split())
    
    sum_ = sum(a // k for a in A)
    print(sum_)
    

    k の長さのパイプが何本取れるか

    1
        5 3
        5 9 7 6 7
    

    5: ■■■ ■■
    9: ■■■ ■■■ ■■■
    7: ■■■ ■■■ ■
    6: ■■■ ■■■
    7: ■■■ ■■■ ■

    1本ずつ k=3 で割った商を足すと、計10本と求めることができます。

好みのピザ

好みのピザ

    input()
    a = set(input().split())
    print(len(a))
    

    客がメニューに無い注文さえしなければ、必ず n 種類以下になるので、入力 n は不要です。入力 m も Python3 なら不要なので、入力一行目はガン無視しました。🤣

    結果は何種類としか考慮されていませんので、客が注文したピザの種類をセット型にして要素数を数えるだけで済みます。

家計の収支

家計の収支

    _, k = map(int, input().split())
    a = map(int, input().split())
    b = map(int, input().split())
    
    result = k + sum(a) - sum(b)
    print(result)
    

    a が収入、b が支出です。家計簿をつけ始めた時の貯金額 k に、a と b のそれぞれを合計した差 a - b を足すと割り出せます。

    a - b がマイナスの時は貯金額が減り、プラスなら貯金額が増えます。

野球世界大会 1 次ラウンドの順位

野球世界大会 1 次ラウンドの順位

    import re
    
    team = 5  # 参加チーム数
    num_game = team * (team-1) // 2  # ゲーム数
    top = 2  # 上位入賞数
    
    c = {input(): 0 for _ in range(team)}
    
    for _ in range(num_game):
        s1, s2, res = re.split(r"[-\s]", input())
        c[s1 if int(res) else s2] += 1
    
    results = sorted(c.items(), key=lambda x:(-x[1], x[0]))
    
    for name, _ in results[:top]:
        print(name)
    

    定数は次のとおりです。

    ・全チーム
    ・全10ゲーム
    ・トップ


    c = {input(): 0 for _ in range(team)}
    

    ここでは辞書で参加チームと、勝ち数の初期値を 0 にして初期化しています。

    for _ in range(num_game):
        s1, s2, res = re.split(r"[-\s]", input())
        c[s1 if int(res) else s2] += 1
    

    正規表現を使って、一気に入力を済ませています。ここぞと無理矢理使って慣れましょう。😁
    \s は半角スペースのことです。ハイフンと半角スペースを区切り文字として三分割しています。

    添字の中で内包表記を使っています。こんなところでも使えるんです。😄
    1 の時は s1 が勝った(True)ので s1 を +1、0 の時は s1 が負けた(False)ので s2 を +1 します。

    results = sorted(c.items(), key=lambda x:(-x[1], x[0]))
    

    辞書のキーと値を使ってソートします。-x[1] は値優先で降順ソート、x[0] はキーを昇順ソートします。

    for name, _ in results[:top]:
        print(name)
    

    上位2チームの国名を1位から順に画面に出力します。

    説明が最後になりましたが、ゲーム数の算出についてです。

    \12345
    1\●●●●
    2 \●●●
    3  \●●
    4   \●
    5    \

    全5チームの時、全試合数は上表のとおり、

    4 + 3 + 2 + 1 = 10

    となります。
    1 〜 N までを足した数を求める公式は次のとおりです。

    N(N+1)2


    このプログラムではチーム数の「5」を使っていますので、1 を引いて算出しています。

    team(team1)2

    team = 5
    num_game = team * (team-1) // 2
    
    team = 5
    num_game = sum(i for i in range(1, team))
    

    辞書のソートがBランク級の難易度ですね。😓