結果

問題 No.3775 Distant Swap
コンテスト
ユーザー pt9999
提出日時 2026-11-04 23:39:53
言語 Fix
(1.6.0 + cp-library + minilib)
コンパイル:
fix_c _filename_
実行:
./a.out
結果
AC  
実行時間 8 ms / 2,000 ms
+ 871µs
コード長 920 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 18,867 ms
コンパイル使用メモリ 668,748 KB
実行使用メモリ 9,916 KB
最終ジャッジ日時 2026-11-04 23:40:20
合計ジャッジ時間 14,333 ms
ジャッジサーバーID
(参考情報)
judge7_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます
コンパイルメッセージ
make: 'lib.o' は更新済みです.

ソースコード

diff #
raw source code

module Main;

import CPLib.IO;

main: IO ();
main = (
    let (n, k) = (*read_i, *read_i);
    let p = *read_is(n);
    let (ans, p) = loop(
        ([], p), |(ans, p)|
        let size_before = ans.@size;
        let (ans, p) = range(0, n-k).fold(
            (ans, p), |i, (ans, p)|
            if p.@(i) < p.@(i+k) { (ans, p) };
            let ans = ans.push_back((i, i+k));
            let v1 = p.@(i);
            let v2 = p.@(i+k);
            let p = p.set(i, v2).set(i+k, v1);
            (ans, p)
        );
        let size_after = ans.@size;
        if size_before == size_after { break $ (ans, p) };
        continue $ (ans, p)
    );
    let sorted = range(0, n-1).check_all(|i| p.@(i) < p.@(i+1));
    if !sorted {
        println $ "-1"
    } else {
        println $ ans.@size.to_string;;
        ans.to_iter.map(|(a, b)|
            "{} {}\n".format((a+1, b+1))
        ).concat_iter.println
    }
);

0