Free time Free Time

Đề bài

Nhàn rỗi không có việc gì, An viết một mảng gồm n số được sắp xếp theo thứ tự không giảm, ngồi nhìn chằm chằm, rồi mệt quá, ngủ quên lúc nào ko biết.

Tỉnh dậy, anh đột nhiên phát hiện ra mảng của mình đã bị thay đổi: 2 phần tử của dãy đã bị đổi chỗ cho nhau. Nghi ngờ do bàn tay của người khác hay là do lúc mộng du anh đã tự mình đổi, An muốn tự mình kiểm tra trước. Nếu ta có thể dùng nhiều nhất 1 lần đổi chỗ 2 phần tử để thu được 1 dãy đã được sắp xếp thì đó là do An đã vô tình thay đổi.

Input
Dòng đầu tiên là n (2 ≤ n ≤ 10^5) — cỡ của mảng. Dòng tiếp theo là n số nguyên dương phân tách bởi dấu cách - các số trong mảng

Output
In ra “YES” (không có dấu ngoặc kép) nếu An đã vô tình thay đổi mảng, ko thì in ra “NO”

Resource limits
Execution time: 2 seconds

Memory: 256.00 MB

Đáp án

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import sys

number_of_line = 0
for line in sys.stdin:
number_of_line += 1
if number_of_line == 2:
arr = [int(i) for i in line.split()]

arr_sorted = sorted(arr)

at1 = -1
at2 = -1
for i in range(len(arr)):
if arr[i] != arr_sorted[i]:
if at1 == -1:
at1 = i
elif at2 == -1:
at2 = i
else:
print("NO")
exit()
if at1 == -1 and at2 == -1:
print("YES")
exit()
if arr[at2] == arr_sorted[at1] and arr[at1] == arr_sorted[at2]:
print("YES")
else:
print("NO")