名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

No.170 スワップ文字列(Easy)

回答

#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.