abc162 d(python)
一組ずつ条件に照らし合わせると当然TLEする
Rがa個、Bがb個、Gがc個あるとすると、最大a*b*c個ある。
そこから条件2に当てはらないものを引いていくという方針。
条件2ではじかれるものは
s[i] != s[i+m+1] and s[i+m] != s[i+2*m+2] and s[i+2*m+2] != s[i]
であり、あとはこれの mの範囲とその時の i の範囲がわかれば解ける
例えばサンプル2の n = 39 のときなら 0≤m≤18 となり、m = (n-3)//2 だと予想できる
(m=18 のときに s[0],s[19],s[38] がギリギリ取れる)
追記:そんなことしなくても i < j < l ≤ n で l == j - i + j となるものをさらっていけば良かった
n = int(input()) s = input() chkR = 0 chkB = 0 chkG = 0 if n == 1 or n==2: print(0) exit() for i in range(n): if s[i] =='R': chkR+=1 if s[i] =='B': chkB+=1 if s[i] =='G': chkG+=1 ans = chkR*chkB*chkG m = (n-3)//2 for i in range(m+1): for j in range(n-2-2*i): if s[j]!=s[j+i+1] and s[j+i+1]!=s[j+2*i+2] and s[j+2*i+2]!=s[j]: ans -= 1 print(ans)