内容
考えたこと
- クエリの数が少ないので、各クエリにO(N)くらいで答えればいいや。
- 区間の幅を固定して、スライドさせていくと解けそう。
- 区間の中の、Dの数、Mの数、DMのくみの数を記録しておく。
実装
N = int(input())
S = input()
Q=int(input())
Queries=list(map(int,input().split()))
for wid in Queries:
ans=0
d_cnt=0
m_cnt=0
dm_cnt=0
for i in range(wid):
if S[i]=="D":
d_cnt+=1
elif S[i]=="M":
m_cnt+=1
dm_cnt+=d_cnt
elif S[i]=="C":
ans+=dm_cnt
for i in range(N-wid):
remove=S[i]
if remove=="D":
d_cnt-=1
dm_cnt-=m_cnt
elif remove=="M":
m_cnt-=1
elif remove=="C":
pass
new_add=S[i+wid]
if new_add=="D":
d_cnt+=1
elif new_add=="M":
m_cnt+=1
dm_cnt+=d_cnt
elif new_add=="C":
ans+=dm_cnt
print(ans)
終わりに