Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 200 点
問題文
{1,\ 2,\ ...,\ N} を並び替えた数列 p = {p_1,\ p_2,\ ...,\ p_N} があります。
あなたは一度だけ、整数 \ i,\ j \ (1 \leq i < j \leq N) を選んで \ p_i\ と \ p_j\ を入れ替える操作を行うことができます。操作を行わないことも可能です。
p を昇順にすることができるなら YES
を、できないならば NO
を出力してください。
制約
- 入力は全て整数である。
- 2 \leq N \leq 50
- p は {1,\ 2,\ ...,\ N} を並び替えた数列である。
入力
入力は以下の形式で標準入力から与えられる。
N p_1 p_2 ... p_N
出力
p を昇順にすることができるなら YES
を、できないならば NO
を出力せよ。
入力例 1
5 5 2 3 4 1
出力例 1
YES
p_1 と p_5 を入れ替えることで p を昇順にできます。
入力例 2
5 2 4 3 5 1
出力例 2
NO
この場合、どのような操作を行っても p を昇順にすることはできません。
入力例 3
7 1 2 3 4 5 6 7
出力例 3
YES
p が最初から昇順なので、操作を行う必要はありません。
Score : 200 points
Problem Statement
We have a sequence p = {p_1,\ p_2,\ ...,\ p_N} which is a permutation of {1,\ 2,\ ...,\ N}.
You can perform the following operation at most once: choose integers i and j (1 \leq i < j \leq N), and swap p_i and p_j. Note that you can also choose not to perform it.
Print YES
if you can sort p in ascending order in this way, and NO
otherwise.
Constraints
- All values in input are integers.
- 2 \leq N \leq 50
- p is a permutation of {1,\ 2,\ ...,\ N}.
Input
Input is given from Standard Input in the following format:
N p_1 p_2 ... p_N
Output
Print YES
if you can sort p in ascending order in the way stated in the problem statement, and NO
otherwise.
Sample Input 1
5 5 2 3 4 1
Sample Output 1
YES
You can sort p in ascending order by swapping p_1 and p_5.
Sample Input 2
5 2 4 3 5 1
Sample Output 2
NO
In this case, swapping any two elements does not sort p in ascending order.
Sample Input 3
7 1 2 3 4 5 6 7
Sample Output 3
YES
p is already sorted in ascending order, so no operation is needed.