https://atcoder.jp/contests/abc135/tasks/abc135_b
解説
https://atcoder.jp/contests/abc135/submissions/6588394
入れ替え操作は全部でO(N2)なので、全通り試すことはできそう。
昇順になっているかの判定もO(N)でできるので、全部でO(N3)で間に合う。
C++にはswap関数があるので、これで要素をswapしよう。
int N, P[50], Q[50]; //--------------------------------------------------------------------------------------------------- bool check(int* v) { rep(i, 0, N) if (v[i] != i + 1) return false; return true; } //--------------------------------------------------------------------------------------------------- #define yes "YES" #define no "NO" string solve() { if (check(P)) return yes; rep(i, 0, N) rep(j, i + 1, N) { rep(k, 0, N) Q[k] = P[k]; swap(Q[i], Q[j]); if (check(Q)) return yes; } return no; } //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; rep(i, 0, N) cin >> P[i]; cout << solve() << endl; }