結果

問題 No.3775 Distant Swap
コンテスト
ユーザー ks2m
提出日時 2026-10-23 22:22:04
言語 Java
(openjdk 27 + ACL)
コンパイル:
javac -J-Duser.language=en -encoding UTF8 -cp /opt/aclib/ac_library.jar _filename_
実行:
java -ea -Xmx700m -Xss256M -DONLINE_JUDGE=true -cp .:/opt/aclib/ac_library.jar _class_
結果
AC  
実行時間 259 ms / 2,000 ms
+ 171µs
コード長 1,047 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,646 ms
コンパイル使用メモリ 100,016 KB
実行使用メモリ 58,264 KB
最終ジャッジ日時 2026-10-23 22:22:17
合計ジャッジ時間 9,409 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		int[] p = new int[n];
		for (int i = 0; i < n; i++) {
			p[i] = sc.nextInt();
		}
		sc.close();

		List<String> list = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			int min = 100000000;
			int mi = i;
			for (int j = i; j < n; j += k) {
				if (p[j] < min) {
					min = p[j];
					mi = j;
				}
			}
			while (mi > i) {
				list.add((mi - k + 1) + " " + (mi + 1));
				int t = p[mi - k];
				p[mi - k] = p[mi];
				p[mi] = t;
				mi -= k;
			}
		}
		boolean ok = true;
		for (int i = 1; i < n; i++) {
			if (p[i - 1] > p[i]) {
				ok = false;
				break;
			}
		}
		if (ok) {
			PrintWriter pw = new PrintWriter(System.out);
			pw.println(list.size());
			for (String s : list) {
				pw.println(s);
			}
			pw.flush();
		} else {
			System.out.println(-1);
		}
	}
}
0