[AtCoder]三井住友信託銀行プログラミングコンテスト2019 D-Lucky Pin

【問題】

D - Lucky PIN
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
問題キャプチャ

【方針】最初は正規表現を用いたが、遅くてTLEになった。頭の文字をfindで探して、お尻の文字をrfindで探す。その間をCounterで探すという作戦にした。

【解答】

#input
n = int(input())
s = str(input())

#output
answer = 0
from collections import Counter

for i in range(10):
    first_pos = s.find("{0}".format(i))
    if first_pos != -1:
        for j in range(10):
            last_pos = s.rfind("{0}".format(j))
            if (last_pos != -1):
                if last_pos > first_pos:
                    answer += len(Counter(s[first_pos+1:last_pos]))

print(answer)

【提出結果】

Submission #26397021 - Sumitomo Mitsui Trust Bank Programming Contest 2019
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

【追記】python3のfastestをみると、Counterを用いると遅くなる。\(\times 10\)程度なので、その間もforで探しても良かった。

コメント

タイトルとURLをコピーしました