题解 CF220A【Little Elephant and Problem】

· · 题解

这是一篇给新手看的题解!

题意:

给出一个长度为n(2<=n<=10000)
的序列,判断在一次交换(即交换序列中的两个数)
后能否使它成为不下降序列。
简单,我的做法与大佬们都不同,他们判断>2的,而我判断<2的

其中代码中的三目运算符((ans==0||ans==2)?YES():NO();)即为

if(ans==1||ans==2) YES();
else NO();

其中 YES 函数 输出 "YES"; NO 函数 输出 "NO"

#include<bits/stdc++.h>//万能头文件不做解释
using namespace std;
int b[100005],n,ans,a[100005];//定义数组b[],a[]与变量n,ans
void YES(){//定义YES函数
    cout<<"YES";//如果判断成功输出YES
}
void NO(){//定义NO函数
    cout<<"NO";//如果判断失败输出NO
}                 
int main(){//main函数
    cin>>n;//输入n
    for(int i=1;i<=n;i++)   cin>>b[i],a[i]=b[i];//按题目要求输入加赋值
    sort(b+1,b+1+n);//sort排序一遍
    for(int i=1;i<=n;i++)
        if (a[i]!=b[i])   ans++;
    (ans==0||ans==2)?YES():NO();//三目运算符
    return 0;//收尾
}