結果
| 問題 |
No.3244 Range Multiple of 8 Query
|
| コンテスト | |
| ユーザー |
AngrySadEight
|
| 提出日時 | 2025-08-09 00:36:53 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,815 bytes |
| コンパイル時間 | 397 ms |
| コンパイル使用メモリ | 82,636 KB |
| 実行使用メモリ | 169,048 KB |
| 最終ジャッジ日時 | 2025-08-09 00:37:24 |
| 合計ジャッジ時間 | 27,848 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 8 RE * 32 |
ソースコード
def inv(x1, x2, x3):
ret = 0
if x1 > x2:
ret += 1
if x1 > x3:
ret += 1
if x2 > x3:
ret += 1
return ret
N, Q = map(int, input().split())
S = str(input())
l = []
r = []
for _ in range(Q):
L, R = map(int, input().split())
l.append(L)
r.append(R)
prev_idx = [[[-1 for _ in range(N + 1)] for _ in range(10)] for _ in range(3)]
for i in range(N):
val = int(S[i])
for j in range(1, 10):
if val == j:
prev_idx[0][j][i + 1] = i + 1
for k in range(2):
prev_idx[k + 1][j][i + 1] = prev_idx[k][j][i]
else:
for k in range(3):
prev_idx[k][j][i + 1] = prev_idx[k][j][i]
mul_8 = []
for i in range(0, 1000, 8):
sr = str(1000 + i)
if '0' not in sr:
mul_8.append(i)
INF = 10 ** 10 + 23
vec_cnt = [0 for _ in range(10)]
for i in range(Q):
if l[i] == r[i]:
if S[l[i] - 1] == '8':
print(0)
else:
print(-1)
continue
elif l[i] + 1 == r[i]:
fs = S[l[i] - 1 : r[i]]
rs = reversed(fs)
if int(fs) % 8 == 0:
print(0)
elif int(rs) % 8 == 0:
print(1)
else:
print(-1)
continue
ans = INF
for x in mul_8:
t1 = x % 10
t2 = (x // 10) % 10
t3 = x // 100
id1 = prev_idx[vec_cnt[t1]][t1][r[i]]
vec_cnt[t1] += 1
id2 = prev_idx[vec_cnt[t2]][t2][r[i]]
vec_cnt[t2] += 1
id3 = prev_idx[vec_cnt[t3]][t3][r[i]]
vec_cnt[t1] -= 1
vec_cnt[t2] -= 1
if id1 < l[i] or id2 < l[i] or id3 < l[i]:
continue
ans = min(ans, 3 * r[i] - 3 - id1 - id2 - id3 + inv(id3, id2, id1))
if ans == INF:
print(-1)
else:
print(ans)
AngrySadEight