题解 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;//收尾
}