結果
問題 |
No.3244 Range Multiple of 8 Query
|
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
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)