ABC162 D - RGB Triplets
問題原文
問題要旨
R
, G
, B
のみからなる長さ の文字列 が与えられる。
であって、 , , が全て異なり、 であるようなものの通り数を求めよ。
解法
全体からカウントしてはいけないものを取り除く 方針を取る。
まず答え全体は明らかに、 (R
の数) × (G
の数) × (B
の数) である。
そしてこの中には、 となるものが混じっているので、 「 であって, , が全て異なるもの」を引けばよい。
これは を固定して で数えられる。
実装
N = int(input()) S = input() ans = S.count('R') * S.count('G') * S.count('B') for i in range(N): for j in range(i + 1, N): if (j + j - i < N) and ({S[i], S[j], S[j + j - i]} == {'R', 'G', 'B'}): ans -= 1 print(ans)
感想
本番は「こういうのは真ん中固定!w」をした結果累積和を3本持ち、それだけならまだしも無駄にsetの演算を取り入れてTLEし、破滅した。
最近のDは方針間違えた結果強引に通すみたいことが多くて結構かなしい。