[Buổi 10][Củng cố mảng một chiều][HW] Bài 7: Khôi phục hoán vị


LÀM BÀI

Points: 20
Time limit: 1.0s
Memory limit: 20M

Author:
Problem types
Allowed languages
C++

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

There are no comments at the moment.

Zalo