問題一覧 > 通常問題

No.3051 Make All Divisible

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 23
作問者 : suisen / テスター : hamamu 👑 rin204
3 ProblemId : 11849 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-01-20 00:25:41

問題文

長さ $n$ の非負整数列 $A = (A_1, A_2, \ldots, A_n)$ と $n$ 以下の正整数 $k$ が与えられます。

あなたは、$A$ に対して以下の操作を $0$ 回以上の任意の回数行うことができます。

  • $1\leq i _ 1\lt i _ 2\lt \cdots \lt i _ k \leq n$ なる整数 $i _ 1, i _ 2, \ldots, i _ k$ を選び、$A_{i _ 1}, A_{i _ 2}, \ldots, A_{i _ k}$ を $1$ ずつ減らす。

あなたの目標は、数列 $A$ が以下の条件を全て満たすようにすることです。

  • $A _ 1, A _ 2, \ldots, A _ n$ は全て $k$ の倍数
  • $A _ 1, A _ 2, \ldots, A _ n$ は全て $0$ 以上

目標が達成可能か判定し、達成可能な場合は目標を達成するまでの操作回数の 最小値 を求めてください。

1 つのファイルに対して $T$ 個のテストケースが与えられるので、その全てに対して上記の問題を解いてください。

入力

入力は以下の形式で標準入力から与えられます。

$T$
$\mathrm{testcase}_1$
$\mathrm{testcase}_2$
$\vdots$
$\mathrm{testcase}_T$

$\mathrm{testcase}_i$ は $i$ 番目のテストケースを表し、以下の形式で与えられます。

$n$ $k$
$A_1$ $A_2$ $\cdots$ $A_n$
  • 入力は全て整数で与えられる
  • $1\leq T\leq 2000$
  • $1\leq k\leq n\leq 2000$
  • $0\leq A_i\leq 10 ^ {15}$
  • 全てのテストケースにわたる $n$ の合計は $2000$ 以下である

出力

$i$ 行目には $i$ 番目のテストケースに対する答えを出力してください。各テストケースに対する答えは、以下の形式で出力してください。

  • 目標が達成不可能な場合は、-1 を $1$ 行に出力してください。
  • 目標が達成可能な場合は、目標を達成するまでの操作回数の 最小値 を $1$ 行に出力してください。

$T$ 個目のテストケースに対する出力の後にも改行を入れてください。

サンプル

サンプル1
入力
4
3 2
1 2 7
5 4
1 2 3 4 5
5 3
1 2 3 4 5
7 3
3 6 0 9 3 3 0
出力
1
-1
2
0
  • 1 つ目のテストケースについて:

    この入力は $n=3$, $k=2$, $A=(1, 2, 7)$ を表します。

    $A _ 1, A _ 3$ が $2$ の倍数でないので、初めは条件を満たしていません。

    $(i _ 1, i _ 2) = (1, 3)$ を選んで操作することで、$A=(0, 2, 6)$ となります。このとき、$A _ 1, A _ 2, A _ 3$ は全て $2$ の倍数であり、全て $0$ 以上なので、条件を満たします。

    従って、目標を達成するまでの操作回数の最小値は $1$ です。

  • 2 つ目のテストケースについて:

    どのように操作しても目標を達成できないことを証明できるので、-1 を出力してください。

  • 4 つ目のテストケースについて:

    操作を行わずとも目標は達成されています。

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