Problem:
MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });

G: Cryptex

問題

AORイカちゃんは自分の宝箱にダイヤル式の鍵をかけている。

鍵には $N$ 個のシリンダーがついている。 あらかじめ設定しておいた $N$ 個の数の並びからなる暗証番号 $T$ と、シリンダーが示す数列が同じであれば開錠することができる。

シリンダーには、 $0$ から $M-1$ までの $M$ 種類の数が同じ向きに順に刻まれており、最初はすべてのシリンダーが $0$ を示している。

鍵は特別製であり、シリンダーを一つずつ回すことができない。任意のシリンダーを二つ選び、それらを同時に動かさなければならない。

一回シリンダーを回すとは、以下のように定義される。

シリンダーを二つ選ぶ。ただし、同じシリンダーは選べない。

選んだシリンダーを二つとも順方向、あるいは二つとも逆方向に回す。順方向に回すとは数を $1$ 増やすことであり、逆方向に回すとは数を $1$ 減らすことである。ただし、 $0$ を示している状態で逆方向に回すと $M - 1$ を示し、 $M - 1$ を示している状態で順方向に回すと $0$ を示す。

AORイカちゃんのために、鍵を開けるために必要なシリンダーの最小の回転数を求めよ。ただし、開けることができない場合は $-1$ を出力せよ。

制約

$2 \le N \le 3 \times 10^2$

$2 \le M \le 10^5$

$0 \le T_i \lt M$

入力は全て整数で与えらえる。

入力形式

入力は以下の形式で与えられる。

$N \ M$
$T_1 \ T_2 \ T_3 \dots T_N$

出力

鍵を開けるために必要なシリンダーの最小の回転数を出力せよ。ただし、開けることができない場合は $-1$ を出力せよ。また、末尾に改行も出力せよ。

サンプル

サンプル入力 1

2 3
0 1

サンプル出力 1

-1

サンプル入力 2

3 6
0 4 4

サンプル出力 2

2

サンプル入力 3

3 6
2 4 2

サンプル出力 3

4

サンプル入力 4

15 56
19 32 40 34 4 10 30 15 4 18 52 28 18 8 4

サンプル出力 4

110

Solution in JAVA (judge verdict: Wrong Answer)


import java.io.*;
import java.util.*;

/**
 * AIZU ONLINE JUDGE
 * 2837 Cryptex
 *    2018/02/17
 */
public class Main {

    int N;
    int M;
    int[] T;
    int nidx; // 負になる場所

    int sov() {return 0; }
    int solv() {return 0; }
    int min() {return 0; }

    boolean main() throws IOException {
        Scanner sc = new Scanner(systemin);

        //int[] ir = readIntArray();
        N = sc.nextInt();//ir[0];
        M = sc.nextInt();//ir[1];
        log.printf("%d %d\n",  N, M);

        //ir = readIntArray();
        //int[] T = ir;
        T = new int[N];
        for(int i = 0; i < N; i++) {
            T[i] = sc.nextInt();
        }
        result.printf("%d\n", 5);
        //sc.close();
        return false;
    }

    PrintStream log;
    PrintStream result = System.out;
    BufferedReader systemin;

    static Main instance = new Main();

    Main() {
        systemin = new BufferedReader(new InputStreamReader(System.in));
        log = new PrintStream(new OutputStream() { public void write(int b) {} } );
    }

	public static void main(String[] args) throws IOException {

		int N = Integer.MAX_VALUE;
		//int N = readIntArray()[0];

		for(int i = 0; i < N; i++) {
			boolean b = instance.main();
			if (!b)
				break;
		}

        instance.systemin.close();
	}


}