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

B: 重さの範囲

問題

重さの異なる $N$ 色のボールがキューにたくさん入っています。キューには、先頭から
$1,2,3, \dots ,N-1,N,1,2,3, \dots ,N-1,N,1,2,3, \dots$ というふうに昇順にボールが並んでいて、
色 $N$ のボールの後ろにはまた色 $1$ のボールから順に入っています。
同じ色のボールはそれぞれ同じ重さであり、色 $i$ のボールの重さは $A_i$ です。

この状態から、キューの先頭からボールを $M$ 個取り出し、これを 1 つのグループとする作業を繰り返します。
そして、キューから取り出した各色のボールの総数がすべて等しくなったときにグループを作る作業をやめます。
なお、キューには十分な数のボールが入っており、グループを作る作業をやめるまでにキューの中身が空になることはありません。

たとえば、
$N=8, M=2$ のとき、{色1,色2}, {色3,色4}, {色5,色6}, {色7,色8} の 4 グループができます
(このとき各色のボールは 1 つずつ存在する)。
$N=4, M=3$ のとき、{色1,色2,色3}, {色4,色1,色2}, {色3,色4,色1}, {色2,色3,色4} の $4$
グループができます (このとき各色のボールはそれぞれ3つずつ存在する)。

このとき、各グループにおいて、
含まれるボールの重さの最大値と最小値の差をそのグループの重さの範囲と呼ぶことにします。
各グループの重さの範囲の総和を出力してください。

制約

$1 \le N \le 1000$

$1 \le M \le N$

$0 \le A_i \le 100$

入力は全て整数である

入力形式

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

$N \ M$

$A_1 \cdots A_N$

出力

答えを 1 行で出力してください。また、末尾に改行も出力してください。

サンプル

サンプル入力 1

8 2
23 61 57 13 91 41 79 41

サンプル出力 1

170

重さの範囲の総和は $38+44+50+38=170$ となります。

サンプル入力 2

4 3
72 46 67 5

サンプル出力 2

222

重さの範囲の総和は $26+67+67+62=222$ となります。

サンプル入力 3

4 2
1 2 3 5

サンプル出力 3

3

重さの範囲の総和は $1+2=3$ となります。

Solution in JAVA (judge verdict: Accepted)


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Main m = new Main();
		m.run();
	}

	Scanner sc = new Scanner(System.in);

	void run() {

		int n = sc.nextInt();
		int m = sc.nextInt();
		
		int a[] = new int[n];
		for(int i =0 ; i < n ; i++){
			a[i] = sc.nextInt();
		}
		
		int result = 0;
		int x = 0;
		for(;;){
			int min = a[x];
			int max = a[x];
			for(int i =0 ; i< m ; i++){
				min = Math.min(min, a[x]);
				max = Math.max(max, a[x]);
				x++;
				if(x == n) x = 0;
			}
			result += max - min;
			if(x == 0){
				break;
			}
		}
		System.out.println(result);
		
	}
}