社区讨论

Help!Unaccpet!

P15313[VKOSHP 2025] Magic Ritual参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlrnbeqf
此快照首次捕获于
2026/02/18 14:23
昨天
此快照最后确认于
2026/02/19 11:00
6 小时前
查看原帖
WA at #2
CPP
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while (t--) {
        int n;
        cin >> n;

        vector<unsigned long long> a(n);
        for (auto &x : a) cin >> x;

        vector<unsigned long long> b = a;
        sort(b.begin(), b.end());

        unordered_map<unsigned long long, vector<int>> mp;
        mp.reserve(n);

        for (int i = 0; i < n; i++)
            mp[b[i]].push_back(i);

        unordered_map<unsigned long long, int> used;
        vector<int> target(n);

        for (int i = 0; i < n; i++)
            target[i] = mp[a[i]][used[a[i]]++];

        vector<bool> vis(n, false);
        long long ans = 0;

        for (int i = 0; i < n; i++) {
            if (vis[i] || target[i] == i) continue;

            vector<int> cyc;
            int j = i;

            while (!vis[j]) {
                vis[j] = true;
                cyc.push_back(j);
                j = target[j];
            }

            sort(cyc.begin(), cyc.end());

            int k = cyc.size();

            int p = 0;
            vector<bool> used_pos(k, false);

            for (int i = 0; i + 1 < k; i++) {
                if (!used_pos[i] && !used_pos[i+1] &&
                    cyc[i+1] - cyc[i] == 2) {
                    used_pos[i] = used_pos[i+1] = true;
                    p++;
                }
            }

            ans += (k - 2LL * p) / 2;
        }

        cout << ans << '\n';
    }
}

回复

0 条回复,欢迎继续交流。

正在加载回复...