[Buổi 10][Củng cố mảng một chiều][HW] Bài 7: Khôi phục hoán vị
Khôi phục hoán vị
Bối cảnh
Chúng ta có một dãy số \(p = \{p_1, p_2, ..., p_N\}\) là một hoán vị của \(\{1, 2, ..., N\}\).
Yêu cầu
Bạn có thể thực hiện thao tác sau đây nhiều nhất một lần: chọn các số nguyên \(i\) và \(j\) \((1 \leq i < j \leq N)\), và hoán đổi \(p_i\) và \(p_j\). Lưu ý rằng bạn cũng có thể chọn không thực hiện hoán đổi.
In ra "YES" nếu bạn có thể sắp xếp \(p\) theo thứ tự tăng dần theo cách đã nêu, và "NO" nếu không thể.
Input
N
p_1 p_2 ... p_N
Output
In ra "YES" nếu có thể sắp xếp \(p\) theo thứ tự tăng dần như đã nói, và "NO" nếu không thể.
Ràng buộc
- Tất cả giá trị đầu vào là số nguyên.
- \(2 \leq N \leq 50\)
- \(p\) là một hoán vị của \(\{1, 2, ..., N\}\).
Ví dụ 1
Input
5
5 2 3 4 1
Output
YES
Giải thích ví dụ
Bạn có thể sắp xếp \(p\) theo thứ tự tăng dần bằng cách hoán đổi \(p_1\) và \(p_5\).
Ví dụ 2
Input
5
2 4 3 5 1
Output
NO
Giải thích ví dụ
Nếu bạn có thể sắp xếp dãy số bằng cách hoán đổi đúng một cặp phần tử, thì sau khi hoán đổi, dãy số sẽ có đúng một hoặc không có phần tử sai thứ tự so với dãy sắp xếp. Nếu không, bạn không thể sắp xếp dãy số bằng một hoán đổi duy nhất.
Trong trường hợp này, hoán đổi bất kỳ hai phần tử nào cũng không thể sắp xếp \(p\) theo thứ tự tăng dần.
Thông tin học tập
- Buổi: B10
- Concepts: arrays, permutations, position validation
- Giới hạn kiến thức: B01-B10
- Time limit: 1 second
- Memory limit: 20 MB
- Point: 20
Comments