这道题的意识是给你一个整形数组,含有很多数字,然后让你通过讲中间的某一个字串颠倒过来,让他成为不下降的数组。其实这题都是特简单的,只要你找到一个不满足上升的字串,然后反过来,直接break,最后判断是不是非下降排列即可。
#include<iostream> using namespace std; #include<cstring> #include<stdio.h> int a[100005]; int main() { int N; int i,j,k; while(cin>>N) { k=0;//标记 int i1=0,j1=0; for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N-1;i++) { if(a[i]>a[i+1]) { if(!k) { k=1; i1=i; } } else if(k) { j1=i; break; } } if(k&&j1==0)j1=N-1; // cout<<i1<<" "<<j1<<endl; k=j1; for(i=i1;i<=(j1+i1)/2;i++,k--) { j=a[i]; a[i]=a[k]; a[k]=j; } k=0; for(i=0;i<N-1;i++) if(a[i]>a[i+1]) { k=1; break; } // for(i=0;i<N;i++) // cout<<a[i]<<" "; if(k)cout<<"no"<<endl; else { cout<<"yes"<<endl; cout<<(i1+1)<<" "<<(j1+1)<<endl; } } return 0; }