社区讨论
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 条回复,欢迎继续交流。
正在加载回复...