[白俊]1062号教诲


質問リンク


https://www.acmicpc.net/problem/1062

問題の説明


  • 文字列リスト
  • 無条件は
  • アンペア
  • を含む
  • 小文字からk個を選択して教育を行う
  • 出力
  • 単語の最大値

    に答える


    予め
  • antic
  • を選択する.
  • 選択k-5選択
  • 選択したアルファベットで読み取れる文字数
  • ピーク出力
  • ポスト

  • 最初に複雑度の計算エラーが発生し、タイムアウトすると思った
  • 質問タイプにシールドがあるので考えました.
  • しかし、座席を除いて再計算すると、すべての状況の数字が40万以下の
  • であることが分かった.
  • 完全探索後、そのまま
  • を解いた.

    コード#コード#

    import sys
    from itertools import combinations
    
    def solution():
        read = sys.stdin.readline
        n, k = map(int, read().split())
        words = [read().rstrip()[4:-4] for _ in range(n)]
    
        # antatica를 선택할수 없으면 0
        if k < 5:
            print(0)
            return
    
        already = set('antatica')
    
        chars = [chr(ord('a')+i) for i in range(26) if chr(ord('a')+i) not in already]
        max_count = float('-inf')
    
        # chars 중에서 k-5개 선택
        for combi in combinations(chars, k-5):
            sett = already | set(combi)
            count = 0
            for word in words:
                possible = True
                # words 중에 하나라도 불가능하면 break
                for i in range(len(word)):
                    if word[i] not in sett:
                        possible = False
                        break
                if possible:
                    count += 1
            max_count = max(max_count, count)
        print(max_count)
    
    solution()