ABC-345
A
解法
B
解法
C
https://atcoder.jp/contests/abc345/tasks/abc345_c
#文字列操作
S = String().contentL = [0]*26flg = False
for i in S: L[ord(i)-97] += 1 if L[ord(i)-97]>1: flg = True
for i in range(26-1): for j in range(i+1,26): ans += L[i]*L[j]
if flg == True: ans += 1
print(ans)
解法
入れ替える2つの文字をとするとの時、必ず入れ替えた後の文字列は違うものとなり、が成立するを利用して同じものを作るものはできない(重複のない文字列を例に考えると、わかると思う)。
とし、にそれぞれの出現をメモすると、で表すことができる。したがって全体の計算量はとなり、十分に高速である。よって題意を満たすことができた。
D
解法
E