F - Avoid K Palindrome 2 Editorial by kemuniku

Pythonのmore_itertoolsを使う方法

2025年6月26日現在、PythonやPyPyのジャッジにはmore_itertoolsという外部ライブラリが導入されています。

このmore_itertoolsに含まれる、distinct_permutationsを用いると、C++のように重複を除いた文字列の並び替えの列挙をすることができ、itertools.permutationsを使って文字列を全列挙してからsetなどを用いて重複を無くす実装よりも高速に動作します。

実装例

from more_itertools import distinct_permutations
N,K = map(int,input().split())
S = input()
ans = 0
for S in distinct_permutations(S):
    for i in range(N-K+1):
        for j in range(K):
            if S[i+j] != S[i+K-j-1]:
                break
        else:
            break
    else:
        ans += 1
print(ans)

PyPy 3.10-v7.3.12での提出(756ms)

posted:
last update: