hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder 灰diff埋め ARC116~ARC130 振り返り

ABCのdiffとARCのdiff全然難易度が違う気がする……

ARC130 A - Remove One Character【解説AC】

 全てのSiの文字列を生成し,その個数を記録しておいて,nCrで求める手法はTLEになります.
 SiとSjが等しいと言うことに対し,他にどのような性質があるかを考える必要があります.i番目の文字が削除されると言うことは,i+1文字目移行の全ての文字が,i文字目に移動するという性質を利用します.SiとSjが等しいならば,i番目からj番目までの文字は全て等しいと言うことになります.
 これを利用して,連続して等しい文字の数を記録し,それを足し合わせることで答えを出すことが出来ます.

import math
N = int(input())
S = list(input())

n = 0
ans = 0
for j in range(1, N):
    if S[j] == S[j-1]:
        n += 1
    else:
        n = 0
    ans += n
print(ans)