CF 220a
题意
给出一个序列,判断在一次交换(即交换序列中的两个数)后能否使它成为不下降序列
分析
对序列排序,检查不一样的个数超过两个就不符合
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int s[N];
int a[N];
int main()
{
int n;
scanf("%d" , &n);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d" , &s[i]);
a[i] = s[i];
}
if(n == 1 || n == 2)
{
printf("YES");
return 0;
}
int cnt = 0;
sort(a + 1 , a + n + 1);
for(int i = 1 ; i <= n ; i++)
{
if(s[i] != a[i])
{
cnt++;
}
}
printf("%s" , (cnt <= 2 ? "YES" : "NO"));
return 0;
}