def bsearch(l, inp):
p1 = 0
p2 = len(l)-1
while p1 != p2:
avg = (p1+p2)//2
curnt = l[avg][0]
if curnt > inp:
p2 = avg
elif curnt < inp:
p1 = avg + 1
avg = (p1+p2)//2
curnt = l[avg][0]
#print(curnt)
if curnt >= inp:
return avg
else:
return -1
N, K = [int(i) for i in input().split()]
S = input()
results = set([])
Jpos=[]
Opos=[]
Ipos=[]
J1=[]
O1=[]
I1=[]
for i in range(N):
if S[i] == "J":
Jpos.append(i)
if S[i] == "O":
Opos.append(i)
if S[i] == "I":
Ipos.append(i)
for i in range(len(Jpos)-K+1):
J1.append([Jpos[i], Jpos[i+K-1]])
for i in range(len(Opos)-K+1):
O1.append([Opos[i], Opos[i+K-1]])
for i in range(len(Ipos)-K+1):
I1.append([Ipos[i], Ipos[i+K-1]])
#print(J1)
#print(O1)
#print(I1)
for x in J1:
s1 = bsearch(O1, x[1])
if s1 != -1:
s2 = bsearch(I1, O1[s1][1])
if s2 != -1:
results.add(I1[s2][1]-x[0]-K*3+1)
if results == set([]):
print(-1)
else:
print(min(results))
컴파일 시 표준 출력 (stdout) 메시지
Compiling 'ho_t2.py'...
=======
adding: __main__.pyc (deflated 41%)
=======
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |