AcWing 5051. 翻转(详细注释版)
原题链接
中等
作者:
yimunai
,
2023-08-06 21:57:09
,
所有人可见
,
阅读 89
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n;
int a[N];
int ff, ee;
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ ) //从前往后找,记录第一个不匹配的数
if(a[i] != i)
{
ff = i;
break;
}
for (int i = n; i >= 1; i -- ) //从后往前找,记录第一个不匹配的数
if(a[i] != i)
{
ee = i;
break;
}
reverse(a + ff, a + ee + 1); // 将记录区间翻转,若还有不匹配的数则找不到合理翻转区间
for (int i = 1; i <= n; i ++ )
if(a[i] != i)
{
cout << 0 << ' ' << 0;
return 0;
}
cout << ff << ' ' << ee;
return 0;
}