結果

問題 No.3244 Range Multiple of 8 Query
ユーザー sasa8uyauya
提出日時 2025-08-22 23:19:15
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,099 bytes
コンパイル時間 300 ms
コンパイル使用メモリ 82,360 KB
実行使用メモリ 100,336 KB
最終ジャッジ日時 2025-08-22 23:19:24
合計ジャッジ時間 9,597 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 1 WA * 16 TLE * 1 -- * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

p=[]
for i in range(1000):
  if i%8==0:
    p+=[tuple(list(map(int,(str(i).zfill(3))[::-1])))]

n,Q=map(int,input().split())
s=input()[::-1]
y=[[] for i in range(10)]
for i in range(n):
  y[int(s[i])]+=[i]

X=10**10

for i in range(10):
  for j in range(3):
    y[i]+=[X*(i*3+j+1)]

from bisect import bisect_left

def solve1(l,r,p):
  z=[]
  ll=l
  z+=[y[p[0]][bisect_left(y[p[0]],ll)]]
  ll=l
  if p[1]==p[0]:
    ll=z[0]+1
  z+=[y[p[1]][bisect_left(y[p[1]],ll)]]
  ll=l
  if p[2]==p[0]:
    ll=z[0]+1
  if p[2]==p[1]:
    ll=z[1]+1
  z+=[y[p[2]][bisect_left(y[p[2]],ll)]]
  if max(z)>r:
    return X
  z[0]-=l
  z[1]-=l
  z[2]-=l
  return solve2(z)

def solve2(z):
  p1,p2,p3=z
  if p1<p2<p3:
    return (p1-0)+(p2-1)+(p3-2)
  if p1<p3<p2:
    return (p1-0)+(p2-1)+(p3-1)
  if p2<p1<p3:
    return (p1-0)+(p2-0)+(p3-2)
  if p2<p3<p1:
    return (p1-0)+(p2-0)+(p3-1)
  if p3<p1<p2:
    return (p1-0)+(p2-1)+(p3-0)
  if p3<p2<p1:
    return (p1-0)+(p2-0)+(p3-0)

for _ in range(Q):
  l,r=map(int,input().split())
  l=n-l
  r=n-r
  l,r=r,l
  a=min(solve1(l,r,v) for v in p)
  print(a if a<X else -1)
0