比赛 2026.8.26 评测结果 WWAATTTTAAAAAAATTTTTTTTTT
题目名称 sort 最终得分 36
用户昵称 ChenBp 运行时间 4.632 s
代码语言 C++ 内存使用 107.67 MiB
提交时间 2026-08-26 12:42:49
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <set>
#include <vector>
using namespace std;
const int N=2e6+6;
int n;
int a[N];
vector<int>ve;
set<vector<int>>s;
void dfs(int i,int j,bool c){
//    cout<<i<<" "<<j<<" "<<c<<"\n";
    if(j>=n-i+1){
        i++;
        j=1;
    }
    if(i==n+1){
        if(c) {
            s.insert(ve);
        }
        return;
    }
    if(ve[j]>ve[j+1]){
        if(c==0){
            dfs(i,j+1,1);
        }
        swap(ve[j],ve[j+1]);
        dfs(i,j+1,c);
        swap(ve[j],ve[j+1]);
    }else{
        if(c==0){
            swap(ve[j],ve[j+1]);
            dfs(i,j+1,1);
            swap(ve[j],ve[j+1]);
        }
        dfs(i,j+1,c);
    }
}
int main(){
    freopen("sorttros.in","r",stdin);
    freopen("sorttros.out","w",stdout);
    cin>>n;
    bool te=1;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(i>1&&a[i-1]!=a[i]+1) te=0;
    }
    if(te){
        long long ans=0;
        for(int i=1;i<=n-1;i++){
            ans+=i;
        }
        cout<<ans;
        return 0;
    }
    ve.resize(n+1);
    for(int i=1;i<=n;i++) ve[i]=a[i];
    dfs(1,1,0);
//    for(auto i=s.begin();i!=s.end();i++){
//        for(auto j:*i) cout<<j<<" ";
//        cout<<"\n";
//    }
    cout<<s.size();
    return 0;
}