問題一覧 > 通常問題

No.3244 Range Multiple of 8 Query

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 52
作問者 : AngrySadEight / テスター : hamamu 👑 ygussany
ProblemId : 12464 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-08-19 01:39:51

問題文

長さ $M$ の文字列 $X$ に対する操作を,以下のように定めます.

  • 操作:$1 \leq i \leq M - 1$ を満たす整数 $i$ を $1$ つ選ぶ.$X$ の $i$ 文字目と $i+1$ 文字目を入れ替える.

$1$ から $9$ までの数字からなる文字列 $T$ に対して,$f(T)$ を次のように定めます.

  • $T$ に対して操作を $0$ 回以上好きな回数行えるとき,$T$ を十進表記の整数として見たときに $8$ の倍数にするために必要な操作の回数の最小値.ただし,どのように操作を行っても不可能な場合は $f(T) = -1$ とする.

長さ $N$ の,$1$ から $9$ までの数字のみからなる文字列 $S$ が与えられます.

以下に示す $Q$ 個のクエリが与えられるので,それぞれに対して答えてください.

  • クエリ $i$:$1 \leq l_i \leq r_i \leq N$ を満たす整数の組 $(l_i, r_i)$ が与えられる.$S$ の $l_i$ 文字目から $r_i$ 文字目までからなる部分文字列を $S[l_i, r_i]$ とするとき,$f(S[l_i, r_i])$ を求めよ.

制約

  • $N, Q, l_i, r_i$ は整数
  • $S$ は $1$ から $9$ までの数字からなる長さ $N$ の文字列
  • $1 \leq N \leq 2.88 \times 10^5$
  • $1 \leq Q \leq 2.88 \times 10^5$
  • $1 \leq l_i \leq r_i \leq N$

入力

入力は以下の形式で標準入力から与えられる.

$N$ $Q$
$S$
$l_1$ $r_1$
$l_2$ $r_2$
$\vdots$
$l_Q$ $r_Q$

出力

$Q$ 行出力せよ.$i \ (1 \leq i \leq Q)$ 行目には,$i$ 番目のクエリに対する答えを出力せよ.

サンプル

サンプル1
入力
15 4
123456789111141
6 9
3 6
10 13
8 15
出力
3
0
-1
7

$1$ 番目のクエリでは,$S[6, 9] = 6789$ です.これを $T$ とします.次のように操作を行うことで,$3$ 回の操作で $T$ を十進表記の整数として見たときの値が $8$ の倍数になります.

  • $i = 1$ を選ぶ.$T$ の $1$ 文字目と $2$ 文字目を入れ替える.$T = 7689$ となる.
  • $i = 3$ を選ぶ.$T$ の $3$ 文字目と $4$ 文字目を入れ替える.$T = 7698$ となる.
  • $i = 2$ を選ぶ.$T$ の $2$ 文字目と $3$ 文字目を入れ替える.$T = 7968$ となる.

$7968 = 996 \times 8$ なので,$7968$ は $8$ の倍数となります.$2$ 回以下の操作で $T$ を十進表記の整数として見たときの値を $8$ の倍数にすることはできないため,答えは $3$ となります.

$2$ 番目のクエリでは,$S[3, 6] = 3456$ です.$432 \times 8 = 3456$ なので,操作を $1$ 回も行わずとも最初から $S[3, 6]$ を十進表記の整数として見たときの値は $8$ の倍数です.

$3$ 番目のクエリでは,$S[10, 13] = 1111$ です.どのように操作を行っても $S[10, 13]$ を十進表記の整数として見たときの値を $8$ の倍数にすることはできないため,$-1$ を出力してください.

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。