結果
| 問題 |
No.3244 Range Multiple of 8 Query
|
| コンテスト | |
| ユーザー |
sasa8uyauya
|
| 提出日時 | 2025-08-22 23:25:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,299 bytes |
| コンパイル時間 | 191 ms |
| コンパイル使用メモリ | 81,988 KB |
| 実行使用メモリ | 77,676 KB |
| 最終ジャッジ日時 | 2025-08-22 23:26:38 |
| 合計ジャッジ時間 | 9,420 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 1 WA * 16 TLE * 1 -- * 22 |
ソースコード
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=list(map(int,input()))[::-1]
y=[[] for i in range(10)]
for i in range(n):
y[s[i]]+=[i]
X=n*3
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
if r-l+1==1:
print([-1,0][s[l]==8])
continue
if r-l+1==2:
p1,p2=s[l:l+2]
if (p2*10+p1)%8==0:
print(0)
elif (p1*10+p2)%8==0:
print(1)
else:
print(-1)
a=min(solve1(l,r,v) for v in p)
print(a if a<X else -1)
sasa8uyauya