結果

問題 No.366 ロボットソート
コンテスト
ユーザー Thế Phúc Trần
提出日時 2026-02-10 17:22:13
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,287 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,031 ms
コンパイル使用メモリ 227,732 KB
実行使用メモリ 16,456 KB
最終ジャッジ日時 2026-02-10 17:22:20
合計ジャッジ時間 6,365 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 6 WA * 15 TLE * 1 -- * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    int k;
    cin >> k;
    vector<int> b = a;
    sort(b.begin(), b.end());
    int ans = 0;
    for (int r = 0; r < k; r++)
    {
        vector<int> pos;
        for (int i = r; i < n; i += k) pos.push_back(i);
        vector<int> cur, tar;
        for (int idx : pos)
        {
            cur.push_back(a[idx]);
            tar.push_back(b[idx]);
        }
        sort(cur.begin(), cur.end());
        sort(tar.begin(), tar.end());
        if (cur != tar)
        {
            cout << -1;
            return 0;
        }
        unordered_map<int,int> mp;
        for (int i = 0; i < (int)tar.size(); i++)
            mp[tar[i]] = i;
        vector<bool> visited(pos.size(), false);
        int cyc = 0;

        for (int i = 0; i < (int)pos.size(); i++)
        {
            if (visited[i]) continue;
            int j = i;
            while (!visited[j])
            {
                visited[j] = true;
                j = mp[a[pos[j]]];
            }
            cyc++;
        }
        ans += (int)pos.size() - cyc;
    }
    cout << ans;
}
0