题目的意思是说一个序列,如果能够通过一次交换任意两个元素,就能使得序列非递减,那么输出yes,否则输出no。使用a数组记录序列,然后复制到b数组,对b数组进行排序,然后比对两个数组,将不同元素的个数记下来,看是否超过两个就行了。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; bool cmp(int a,int b) { return a<b; } int main() { int n,a[100010],b[100010]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(a,a+n,cmp); int ans=0; for(int i=0;i<n&&ans<=2;i++) if(a[i]!=b[i]) ans++; if(ans<=2) printf("YES\n"); else printf("NO\n"); return 0; }
codeforces 221C Little Elephant and Problem,布布扣,bubuko.com
codeforces 221C Little Elephant and Problem
原文:http://blog.csdn.net/knight_kaka/article/details/21643167