Description
Solution
这种题简直是,普及组小朋友随便过的题目。
直交换两个数,那么很明显只用排一次序之后两两的比对,如果不同的个数=2那么就输出YES否则就输出NO。
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
int i,j,k,l,t,n,m,ans;
int a[100007],b[100007];
int main(){
scanf("%d",&n);
fo(i,1,n)scanf("%d",&a[i]),b[i]=a[i];
sort(a+1,a+1+n);
fo(i,1,n){
if(a[i]!=b[i])t++;
}
if(t>2)printf("NO\n");
else printf("YES\n");
}