結果
| 問題 | No.3256 Permutation Equation |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-18 18:55:43 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 53 ms / 2,000 ms |
| コード長 | 2,043 bytes |
| 記録 | |
| コンパイル時間 | 3,114 ms |
| コンパイル使用メモリ | 286,924 KB |
| 実行使用メモリ | 12,488 KB |
| 最終ジャッジ日時 | 2025-12-18 18:55:58 |
| 合計ジャッジ時間 | 13,101 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 48 |
ソースコード
#include <bits/stdc++.h>
#include <iterator>
#include <string>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vl = vector<ll>;
#define rep3(i, a, b, c) for (ll i = (a); i < (b); i += (c))
#define rep2(i, a, b) rep3(i, a, b, 1)
#define rep1(i, n) rep2(i, 0, n)
#define rep0(n) rep1(aaaaa, n)
#define ov4(a, b, c, d, name, ...) name
#define rep(...) ov4(__VA_ARGS__, rep3, rep2, rep1, rep0)(__VA_ARGS__)
#define per(i, a, b) for (ll i = (a) - 1; i >= (b); i--)
#define fore(e, v) for (auto &&e : v)
#define all(a) begin(a), end(a)
#define sz(a) (int)(size(a))
#define lb(v, x) (lower_bound(all(v), x) - begin(v))
#define eb emplace_back
template <typename T, typename S> bool chmin(T &a, const S &b) {
return a > b ? a = b, 1 : 0;
}
template <typename T, typename S> bool chmax(T &a, const S &b) {
return a < b ? a = b, 1 : 0;
}
const int INF = 1e9 + 100;
const ll INFL = 3e18 + 100;
#define i128 __int128_t
struct _ {
_() { cin.tie(0)->sync_with_stdio(0), cout.tie(0); }
} __;
void solve();
int main() {
int N;
cin >> N;
vi P(N);
fore(i, P) cin >> i, i%=N;
vector C(N, vector<vi>());
vi used(N);
rep(i, N) {
if (used[i])
continue;
vi c(1, i);
used[i] = 1;
int t = P[i];
while (t != i) {
used[t] = 1;
c.push_back(t);
t = P[t];
}
C[ssize(c) - 1].push_back(c);
}
vi Q(N);
rep(i, N) {
if (i % 2) {
if (ssize(C[i]) % 2 != 0) {
cout << "No\n";
return 0;
}
rep(j, 0, ssize(C[i]), 2) {
vi v1 = C[i][j], v2 = C[i][j + 1];
rep(k, i + 1) {
Q[v1[k]] = v2[k];
Q[v2[k]] = v1[(k + 1) % (i + 1)];
}
}
} else {
rep(j, ssize(C[i])) {
vi v = C[i][j];
vi ansv(i + 1);
rep(k, i + 1) ansv[(k * 2) % (i + 1)] = v[k];
rep(k, i + 1) { Q[ansv[k]] = ansv[(k + 1) % (i + 1)]; }
}
}
}
cout << "Yes\n";
fore(i, Q) cout << (i + N - 1) % N + 1 << ' ';
cout << '\n';
}