呜呜呜┭┮﹏┭┮,ARC太难了,只会 A 题。
emmmm,乍一看:不就是0,1,2三种情况吗?0,2好判段,直接看1不就行了?然后写出了这个代码↓
#include <bits/stdc++.h>
using namespace std;
#define int long long
int P[200005];
signed main(){
int T;
cin>>T;
while(T--){
int N;
cin>>N;
bool flag=true;
for(int i=1;i<=N;i++){
cin>>P[i];
if(P[i]!=i)
flag=false;
}
if(flag){
cout<<0<<endl;
continue;
}
int ans=2,sum=0;
for(int i=1;i<=N;i++){
sum+=P[i];
if(sum==i*(i+1)/2 && P[i+1]==i+1){
ans=1;
break;
}
}
cout<<ans<<endl;
}
return 0;
}
得到了的好成绩。
当然,你也可以通过看最大最小值来判断 1 的情况。最终的代码就是用的最大最小值判断的。
WHY? 当我拿出 5 4 3