回答
#45073 No.170 スワップ文字列(Easy) - yukicoder
結果から言えば,解説通りの解き方をした.
出現数が多い文字列から組みあわせを掛けあわせる.
ちなみに,No.171も基本的にはこれで溶ける.
No.170くらいであれば,組み合わせの数が少ないため,itertoolsでコンビネーション求めて,その長さを出す方法でもOK(No.171でやったら余裕でTLEした)
from math import factorial S = input() dic = dict() for c in S: if c not in dic: dic.update({c:1}) else: dic[c] += 1 length = len(S) res = 1 vs = [i for i in dic.values()] vs.sort() vs = vs[::-1] for i in vs: res *= factorial(length) // (factorial(length - i) * factorial(i)) length -= i print((res-1))
No.171 スワップ文字列(Med)
from math import factorial S = input() dic = dict() for c in S: if c not in dic: dic.update({c:1}) else: dic[c] += 1 length = len(S) res = 1 vs = [i for i in dic.values()] vs.sort() vs = vs[::-1] for i in vs: res *= factorial(length) // (factorial(length - i) * factorial(i)) length -= i print((res-1) % 573)
偶然にもこれで初めての★3AC.